Я новичок в malloc и выровненном malloc. Я знаю, как их использовать. Однако я точно не знаю, в каком случае мы должны использовать выровненный malloc вместо стандартного malloc. Вы можете мне объяснить, пожалуйста? Спасибо вам всем.Различия между выровненными malloc и стандартными malloc?
ответ
glibc
documentation делает это достаточно ясно, где вы должны использовать aligned_alloc
:
Адрес блока, возвращенного
malloc
илиrealloc
в системах GNU всегда кратно восьми (или шестнадцати лет на 64-разрядных системах) , Если вам нужен блок, адрес которого кратен более высокой мощности, чем два, используйтеaligned_alloc
илиposix_memalign
.
Стандарт C уже гарантирует, что malloc
возвратит соответствующим образом выровненный блок памяти для любого из стандартных типов, но может возникнуть ситуации, в которых вы хотите или должны строже выравнивание.
В качестве примера, я, кажется, припоминаю, что SSE2 (SIMD) инструкции необходимо их данные выровнены по границам 16 байт, так что вы можете использовать aligned_alloc
, чтобы дать вам, что даже в системах, где malloc
только гарантирует выравнивание по границе 8 байт ,
Язык? Я предполагаю, что C, но вы также должны предоставить другие детали среды (OS, языковая реализация и т. Д.). Стандарт C имеет только 'malloc', который будет правильно выровнен для всех стандартных типов данных. – paxdiablo
Я использую в стандарте C11 в Ubuntu – blackcafe
Добавил теги как теги, пожалуйста, подтвердите и/или измените по мере необходимости. – paxdiablo