Как стать автором
Обновить

Комментарии 4

Держать указатель стека выровненным надо не потому что функция может что-то там внутри сделать, а потому что этого требует системный x64 ABI:


The stack will always be maintained 16-byte aligned, except within the prolog (for example, after the return address is pushed), and except where indicated in Function Types for a certain class of frame functions.
https://learn.microsoft.com/en-us/cpp/build/stack-usage?view=msvc-170#stack-allocation

Ну так а почему этого требует системный x64 ABI? Потому что функция может что-то там внутри сделать.

Ну уж нет!


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

Все-таки ветер дует не от того, что деревья качаются. Кроме, как для XMM такое ограничение было не нужно. А сейчас AVX-256/AVX-512 еще пламенный привет передают. Там с выравниванием еще печальнее. Лучше бы спрятали свое выравнивание внутрь и не морочили людям головы.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации