Причины обычно кроются в выравнивании проблемах;существует ограничение для выполнения требований процессора, поддержки стратегий оптимизации кэша или других причин.
Как часть основной цели удовлетворения требований к выравниванию системы (ОС, спецификации языка, процессора), которые могли быв противном случае это может привести к сбоям (с различными воздействиями в зависимости от системы) или неэффективному поведению (при необходимости выполнять дополнительные операции чтения памяти, чтобы получить те же данные, которые пересекают границу блока памяти) во время выполнения, будет применяться минимальное требование выравнивания.
Однако вы можете найти эмпирически, что они выровнены в еще большей степени, чем это строго требовалось в предыдущих ограничениях.Например, конкретная реализация распределителя может увеличить его по следующим причинам:
- добавление барьеров переполнения памяти и / или другие механизмы проверки / проверки целостности
- позволяют более эффективно хранить указатели(например, если вы знаете, что младшие 4 бита равны нулю, вы можете упаковать их некоторым образом, если сохраните их
- , упрощая или повышая эффективность вычисления адресов
- , уменьшая фрагментацию и / или другиепричины, которые могут показаться неэффективными для отдельного распределения, но удовлетворяют некоторой цели в более широком наборе распределений