请教:
我在最近的程序调试中发现一些与变量地址对齐方式有关的问题,希望能讨论一下:
1、定义如下两个数组:
unsigned short A[40];
unsigned short B[64];
使用时发现A的基址有时会对齐到2,而B的基址总是对齐到4。而我现在希望数组首址对齐到4(便于在short和DWORD间强制转换)。
请问是不是只要把数组长度定义成16 32 64之类,编译器就会把数组对齐到4?
2、如果我定义这样一个结构:
{ short A;
float C;}
编译器能否保证在变量间不出现空闲的地址?
3、
如果是
{
short A;
short B;
float C;
}这样使得short成对出现,是否就能保证结构变量基址对齐到4?
Allen35065:
1, 对齐需要使用宏 #pragma DATA_ALIGN(A, 8) 以8byte对齐
2, 不能,这个结构里会出现16bit的空位,
3, 这样是可以的,为了保险起见你最好用宏将其对齐