Хеш-таблицы, Распределение по страницам
Это действительно помогает для хеш-таблиц, потому что вы вычисляете индекс по модулю размера, и если этот размер является степенью двойки, модуль может быть вычислен с помощью простых побитовых и или &
вместо использования более медленной инструкции класса деления, реализующей оператор %
.
Глядя на старую книгу по Intel i386, and
- это 2 цикла, а div
- это 40 циклов. Несоответствие сохраняется и сегодня из-за гораздо большей фундаментальной сложности деления, даже несмотря на то, что общее время цикла в 1000 раз быстрее скрывает влияние даже самых медленных операций.
Было также время, когда накладные расходы на маллок время от времени избегались. Распределение, доступное непосредственно из операционной системы, будет (все еще есть) определенным числом страниц, и поэтому степень двойки, скорее всего, будет максимально использовать гранулярность распределения.
И, как уже отмечали другие, программисты любят полномочия двух.