ARM字节对齐很特殊?
#include <stdio.h>
class A{
unsigned short i;
};
struct B{
unsigned short i;
};
static unsigned short C;
static char D[1024];
int main()
{
printf("A:%d B:%d C:%d\n",sizeof(A),sizeof(B),sizeof(C));
printf("D's addr:0x%x\n",(unsiged int)&D[0]);
return 0;
}
在PC X86下测试结果:
A:2 B:2 C:2
然后D的地址是4B对齐的,在mips下面测试结果跟PC x86一致,但是在arm9下面测试结果却差异很大:
A:4 B:4 C:2
然后D的地址有可能不是4B对齐的而且可能是奇数地址,那位高手能告诉原因,或者是否有规避的方法,当然不能用linux的强制4B对齐的__attribute__关键字等,因为我的代码是要求与平台无关的,最好是从编译器和编译选项上想。
我的ARM GCC版本:3.4.3