我在其他帖子中写过这个问题。虽然事实并非如此。
GCC compiler version: 4.8.3 (for 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];
}
请注意,数据位于任何函数之外,因此它不在堆栈中分配。
我看到(调试时)p
的结果是:536870912, 536870913, 536870914, 536870915;
我期待这样的结果:536870912, 536870920, 536870928, 536870936
任何帮助将不胜感激。
最佳答案
您告诉编译器在 8 字节边界上对齐数组。 不是每个成员。简单的答案是 - 您不能使用标量数据类型来做到这一点,因为编译器不允许在数组元素之间放置任何填充(毕竟,作为指向 uint8_t 的指针仍应仅递增指针1)。
类似于
struct alignas(8) AL_BYTE{
uint8_t theByte;
}
struct AL_BYTE data[4] __attribute__ ((aligned (8))) = {{.theByte=1},....
应该达到你想要的。
关于c - GCC __attribute__ ((对齐 (8))) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36261440/