2008-09-24 2 views
7

Я читал устаревший код, который внедряется в настраиваемую систему пула памяти, затем я обнаружил, что в коде используется _aligned_malloc. Интересно, что это за функция и когда я должен ее использовать.Когда следует использовать _aligned_malloc()?


Спасибо всем.

Я прочитал MSDN, но я хотел был ответить как «Пример причины для желаемого определенного выравнивания состоит в том, чтобы использовать данные с инструкцией SSE на x86, где данные должны быть выровнены с несколькими 16" ,

Я наконец понял, что означает этот код. еще раз спасибо.

+1

Другой пример - процессор ARM. Для этого требуется выровнять все данные до 4 байтов. – 2008-09-24 08:17:53

ответ

0

Вы проверили документацию MSDN? Вы можете найти соответствующую информацию here.

10

Эта функция полезна, когда выравнивание распределения памяти важно для вас. Выравнивание означает, что числовое значение возвращаемого указателя должно быть равномерно делено на определенное число, т. Е. ((unsigned int) ptr)% выравнивание должно оцениваться до 0.

Примером причины для желаемого выравнивания является использование данных с инструкцией SSE на x86, где данные должны быть выровнены с несколькими 16 .

+0

Или вы пытаетесь сохранить 4 байта на PowerPC (и др.), – 2008-09-24 06:39:53

5

Вот пример использования, к которому вы можете относиться. За 17 лет разработки C/C++ я только однажды нуждался в реализации функций _aligned_malloc() (реализация WinOS) и memalign (POSIX), и это было при кодировании низкоуровневых дисковых операций ввода-вывода. Причиной этого является то, что, когда не используется буфер ввода-вывода ОС (например, в WinOS-вызове openfile() с флагом FILE_FLAG_NO_BUFFERING) и чтение/запись на диск, OS требует, чтобы блок памяти был выровнен по размеру сектора диска; если размер сектора диска составлял 512 байт, и вы хотели записать 1234 байта на диск, я бы сделал что-то вроде этого:

_aligned_malloc(1234, 512); 
Смежные вопросы