GCC __attribute__ ((对齐 (8))) 不起作用

Hai*_*iri 2 c gcc

我在其他帖子中写过这个问题。虽然事实并非如此。

GCC编译器版本:4.8.3(适用于ARM)

代码摘录:

uint8_t data[4] __attribute__ ((aligned (8))) = {1,2,3,4};

int main()
{
    uint32_t p = 0;
    p = (uint32_t)&data[0];
    p = (uint32_t)&data[1];
    p = (uint32_t)&data[2];
    p = (uint32_t)&data[3];
}
Run Code Online (Sandbox Code Playgroud)

请注意,数据位于任何函数之外,因此不会堆栈中分配。

我看到的结果(调试时)是p536870912, 536870913, 536870914, 536870915;

我期待这样的事情:536870912, 536870920, 536870928, 536870936

任何帮助将非常感激。

tof*_*fro 5

您告诉编译器在 8 字节边界上对齐数组。不是每个成员。简单的答案是 - 你不能使用标量数据类型来做到这一点,因为编译器不允许在数组元素之间放置任何填充(毕竟,*x++作为指向 uint8_t 的指针仍然应该只将指针增加 1)。

就像是

struct alignas(8) AL_BYTE{
   uint8_t theByte;
}
struct AL_BYTE data[4] __attribute__ ((aligned (8))) = {{.theByte=1},....
Run Code Online (Sandbox Code Playgroud)

应该达到你想要的。