Держи голову в холоде, живот в голоде, а ноги в тепле стек выровненным.
Некоторые архитектуры ЦП требуют, чтобы указатель стека (SP) оставался выровненным по 16-байтовой границе. Это требование обеспечивает эффективный доступ к памяти, особенно для векторных/SIMD-операций, и помогает предотвратить ошибки выравнивания в некоторых случаях. Обратите внимание, что «всегда» обычно означает сохранение этого выравнивания во время нормального выполнения (например, при входе/выходе из функции и для стековых кадров), хотя временные нарушения выравнивания могут возникать во время кода пролога/эпилога.
Вот архитектуры, требующие этого:
Некоторые архитектуры ЦП требуют, чтобы указатель стека (SP) оставался выровненным по 16-байтовой границе. Это требование обеспечивает эффективный доступ к памяти, особенно для векторных/SIMD-операций, и помогает предотвратить ошибки выравнивания в некоторых случаях. Обратите внимание, что «всегда» обычно означает сохранение этого выравнивания во время нормального выполнения (например, при входе/выходе из функции и для стековых кадров), хотя временные нарушения выравнивания могут возникать во время кода пролога/эпилога.
Вот архитектуры, требующие этого:
- x86-64 (AMD64): ABI System V требует 16-байтового выравнивания стека перед вызовами функций и в большинстве областей кода, в первую очередь для поддержки инструкций SSE/AVX, требующих выровненной памяти.
- AArch64 (ARM64): Указатель стека всегда должен быть выровнен по 16 байтам, с аппаратной поддержкой генерации ошибки выравнивания в случае невыровненного выравнивания (через бит SCTLR,SA).
- PowerPC64: ABI ELF требует, чтобы указатель стека всегда поддерживал выравнивание по четырём словам (16 байт).
- RISC-V (64-бит): Стандартный ABI требует выравнивания указателя стека по 16 байтам (128 бит), особенно в реализациях с аппаратной поддержкой операций с плавающей запятой.
- SPARC64: ABI определяет, что указатели стека и фрейма должны быть выровнены по 128-битной (16 байт) границе.
- IA-64 (Itanium): Указатель стека всегда должен указывать на выровненный по 16 байтам адрес, согласно программным соглашениям.
