Когда я должен использовать _aligned_malloc ()? - PullRequest
8 голосов
/ 24 сентября 2008

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


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

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

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

Ответы [ 3 ]

10 голосов
/ 24 сентября 2008

Эта функция полезна, когда выравнивание вашего распределения памяти важно для вас.

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

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

5 голосов
/ 28 декабря 2012

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

_aligned_malloc(1234, 512);
0 голосов
/ 24 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...