我正确地收到了对齐警告
cast增加了对目标类型[-Wcast-align]的必需对齐
由于以下代码,来自GCC编译器:
uint8_t array[100];
uint32_t foo;
foo = * ( (uint32_t *) &array[10]);
然后我使用aligned
属性来找出问题所在:
uint8_t array[100] __attribute__ ((aligned(4)));
uint32_t foo;
foo = * ( (uint32_t *) &array[10]);
尽管有这个技巧,但我得到了同样的警告。那是正常现象还是警告应该消失?
答案 0 :(得分:1)
__attribute__ ((aligned(4)))
仅对齐数组的开头,而不对齐数组的每个元素。
如果起始位置对齐并且偏移量为10
(不能被4整除),则结果地址将不对齐。
答案 1 :(得分:0)
考虑一下:&array[10]
甚至不会与__attribute__ ((aligned(4)))
对齐4字节,因为您正在将10字节的偏移量看成4字节对齐的数组。因此,在此示例中,您将仅获得2字节对齐,并且gcc正确会发出警告。尝试使用索引12而不是10进行尝试,然后警告可能消失。