我正确地得到了对齐警告
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]);
尽管如此,我还是得到了同样的警告。这是正常的还是警告应该消失?
想一想:&array[10]
即使用__attribute__ ((aligned(4)))
也不会对齐4字节,因为你正在查看一个4字节对齐数组的10字节偏移量。因此,在此示例中,您将只获得2字节对齐,并且gcc发出警告是正确的。尝试索引为12而不是10,警告可能会消失。
__attribute__ ((aligned(4)))
只对齐数组的开头,而不是对齐它的每一个元素。
如果开头是对齐的,并且偏移量是qazxsw poi,它不能被4整除,则生成的地址将不会对齐。