Информация об изменениях

Сообщение Re[6]: Какова скорость доступа к членам класса o(...)? от 26.07.2019 9:26

Изменено 26.07.2019 9:30 Passerby

Re[6]: Какова скорость доступа к членам класса o(...)?
Здравствуйте, RushDevion, Вы писали:

D>>>Отладка практически всегда медленнее. Так скорость не меряют. И естественно словарь медленнее.

P>>Почему словарь медленнее?

RD>Потому что a.i++ это на уровне машинных инструкций по сути одна команда — "увеличь значение по заданному адресу в памяти".

RD>А dct["a"]++ это dct["a"] = dct["a"] + 1, т.е.:
RD>1. Посчитать хэш символа "a"
RD>2. Смапить посчитанный хэш на бакет внутри dct
RD>3. Пройти линейным поиском по списку элементов внутри бакета (элемент — это ключ+значение), сравнивая ключ каждого из них с "a"
RD>4. Вернуть значение найденного элемента, которое опять помещается в хэш, для чего
RD>5. Посчитать хэш символа "a"
RD>6. Смапить посчитанный хэш на бакет внутри dct
RD>7. Пройти линейным поиском по списку элементов внутри бакета
RD>8. Заменить значение в найденном элементе на новое (инкрементированное) значение

RD>Сам видишь, действий тут намного больше


Как вычисляется адрес в словаре расписано, а как вычисляется адрес i в классе — нет.
Re[6]: Какова скорость доступа к членам класса o(...)?
Здравствуйте, RushDevion, Вы писали:

D>>>Отладка практически всегда медленнее. Так скорость не меряют. И естественно словарь медленнее.

P>>Почему словарь медленнее?

RD>Потому что a.i++ это на уровне машинных инструкций по сути одна команда — "увеличь значение по заданному адресу в памяти".

RD>А dct["a"]++ это dct["a"] = dct["a"] + 1, т.е.:
RD>1. Посчитать хэш символа "a"
RD>2. Смапить посчитанный хэш на бакет внутри dct
RD>3. Пройти линейным поиском по списку элементов внутри бакета (элемент — это ключ+значение), сравнивая ключ каждого из них с "a"
RD>4. Вернуть значение найденного элемента, которое опять помещается в хэш, для чего
RD>5. Посчитать хэш символа "a"
RD>6. Смапить посчитанный хэш на бакет внутри dct
RD>7. Пройти линейным поиском по списку элементов внутри бакета
RD>8. Заменить значение в найденном элементе на новое (инкрементированное) значение

RD>Сам видишь, действий тут намного больше


Как вычисляется адрес в словаре расписано, а как вычисляется адрес i в классе — нет. В словаре вычисляется адрес значения "a", в классе адрес значения i.