Как компиляторы реализуют __declspec (align (x)) / __attribute __ ((align (x)))? - PullRequest
0 голосов
/ 30 сентября 2018

Представьте себе структуру, подобную этой:

struct S {
    __declspec(align(32)) double A[4]; // MSVC / ICL on Windows
    double A[4] __attribute__((aligned(x))); // CLANG / GCC
};

Структура может быть размещена в стеке или, например, с использованием malloc, в любом случае сам экземпляр структуры может не выравниваться.Так можем ли мы рассчитывать на то, что элемент A будет выровнен по 32 байта?Если так, как это делает компилятор?

1 Ответ

0 голосов
/ 30 сентября 2018

По крайней мере для MSVC, так как документы для __declspec (align ()) говорят, что это влияет только на статическое и автоматическое размещение объектов, а не на динамическое распределение.Если вы хотите управлять динамическим выравниванием размещения, вам нужно использовать функцию, такую ​​как _aligned_malloc, которая предоставляет эту возможность.

...