Войти
ПрограммированиеТермины

Memory Alignment (Выравнивание в памяти)

Выравниванием в памяти называется кратность адреса данных какому-то числу, к примеру, 16 байтам.
Для эффективного использования некоторых расширений процессора данные в памяти должны быть выровнены, обычно именно по 16 байт.
В microsoft компиляторе и ему подобных существует ряд команд процессору, чтобы тот укладывал данные выровненно. Вот некоторые примеры:

__declspec(align(16)) float val; //выровненная переменная на стеке

также в настройках компилятора можно выбрать structure member alignment -> 16, но помните, что это обеспечит лишь укладывание членов структуры между собой на расстояние, кратное 16 байтам. Если инстанс самой структуры будет не выровнен в памяти, то и все её мемберы будут также не выровненны.

ну и plain C метод выделения блоков памяти с выровненным адресом:

void *data = _aligned_malloc(size, alignment); //alignment задаёт выравнивание в битах

Существует один очень простой способ определить, выровнен ли адрес переменной на 16 байт - если он заканчивается нулём, то выровнен, в противном случае нет:
alignedptr | Memory Alignment (Выравнивание в памяти)

Что такое Memory Alignment (Выравнивание в памяти)?

#SSE, #память

10 июня 2009