Поделиться через


Конфликты с компилятором x86

Типы данных, размер которых превышает 4 байта, не выравниваются в стеке автоматически при компиляции приложения с помощью компилятора x86.Поскольку архитектура компилятора x86 представляет собой выровненный 4-байтовый стек, что-либо большее, чем 4 байта, например, 64-разрядное целое число, не может автоматически выравниваться по 8-байтовому адресу.

Работа с данными без выравнивания имеет два ограничения.

  • Доступ к невыровненным расположениям может занимать слишком много времени по сравнению с доступом к выровненным расположениям.

  • Невыровненные расположения не могут использоваться в блокируемых операциях.

Если требуется более строгое выравнивание, используйте __declspec(align(N)) on your variable declarations.Это заставляет компилятор динамически выравнивать стек в соответствии с требованиями.Тем не менее динамическая настройка стека во время выполнения может привести к замедлению выполнения приложения.

См. также

Ссылки

Типы и хранилище

align (C++)