В принципе, если вам нужно более жесткое выравнивание, чем вам даст malloc.Malloc обычно возвращает указатель, выровненный так, что он может использоваться с любым из примитивных типов (часто 8 байтов на обычных настольных компьютерах).
Однако иногда вам требуется выравнивание памяти на других границах, например 4Kи т. д. В этом случае вам понадобится memalign
.
Это понадобится, например,
- при написании менеджера памяти (например, сборщика мусора).).В этом случае иногда удобно работать с памятью, выровненной по блокам большего размера.Таким образом, вы можете хранить метаданные, общие для всех объектов в данном блоке, в нижней части выделенной области и получать к ним доступ, просто маскируя младшие значащие биты указателя объекта.
- при взаимодействии с оборудованием(никогда не делал этого сам, но IIRC, некоторые виды блочных устройств требуют согласованной памяти).См. Подробности в ответе nm.