编译器如何实现__declspec(align(x))/ __attribute __((aligned(x)))?

时间:2018-09-30 18:31:52

标签: c++ visual-c++ alignment memory-alignment

想象一下这样的结构:

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 :(得分:0)

至少对于MSVC,因为__declspec(align())的文档说它仅影响静态和自动对象分配,而不影响动态分配。如果要控制动态分配对齐,则需要使用提供该功能的函数,例如_aligned_malloc。