Если вы выделяете какой-то расширяемый буфер, в котором вам нужно выбрать какое-то число для начального распределения, тогда да, степени 2 - это хорошие числа для выбора.Если вам нужно выделить память для struct foo, тогда просто malloc (sizeof (struct foo)).Рекомендация для распределений степени 2 вытекает из неэффективности внутренней фрагментации, но современные реализации malloc, предназначенные для многопроцессорных систем, начинают использовать локальные пулы ЦП для распределений, достаточно малых для этого, чтобы предотвратить конфликт блокировки, который использовался длярезультат, когда несколько потоков будут пытаться выполнять malloc одновременно и тратить больше времени на блокировку из-за фрагментации.
Распределяя только то, что вам нужно, вы гарантируете, что структуры данных более плотно упакованы в памяти, что улучшает кэшчастота попаданий, которая оказывает гораздо большее влияние на производительность, чем внутренняя фрагментация.Существуют сценарии с очень старыми реализациями malloc и очень высокопроизводительными многопроцессорными системами, в которых явное заполнение распределений может обеспечить ускорение, но в этом случае ваши ресурсы будут лучше потрачены на лучшую реализацию malloc и запуск в этой системе.Предварительное заполнение также делает ваш код менее переносимым и не позволяет пользователю или системе выбирать поведение malloc во время выполнения, программно или с переменными среды.
Преждевременная оптимизация - корень всех зол.