目的,当然即使不加这个成员通常编译器也会给我们自动填补对齐,我们自己加上它只是起到显示的提醒作用。 四、字节对齐可能带来的隐患 代码中关于对齐的隐患,很多是隐式的。比如在强制类型转换的时候。例如: unsigned int i = 0x12345678; unsigned char *p = NULL; unsigned short *p1 = NULL; p=&i; *p=0x00; p1=(unsigned short*)(p+1); *p1=0x0000; 最后两行代码,从奇数边界去访问unsigned short型变量,显然不符合对齐的规定。在X86上,类似的操作只会影响效率,但是在MIPS或者sparc上,可能就是一个error,因为它们要求字节必须对齐。 五、如何查找与字节对齐方面的问题 如果出现对齐或者赋值问题首先查看 1.编译器设置的对齐值 2.看这种体系本身是否支持非对齐访问 3.如果支持看设置了对齐与否,如果没有则看访问时需要加某些特殊的修饰来标志其特殊访问操作。
摘自 专注于嵌入式
|