我想测试是否可以访问 C 中结构的未对齐成员,请参阅代码
#include <stdio.h>
#pragma pack(1) /* force 1 byte alignment */
/* either member b or member d is mis-aligned */
typedef struct
{
int b;
unsigned char c;
unsigned int d;
}A ;
int main(int argc, char *argv[])
{
A _a = {0};
unsigned int *p = NULL;
unsigned int *q = NULL;
printf("addr of _a : 0x%08x, size of _a : %u\n", &_a, sizeof(_a));
p = (unsigned int*)(&_a.b);
q = (unsigned int*)(&_a.d);
/* should this fail ? */
(*p)++ , (*q)++;
return 0;
}
假设程序会因为内存访问未对齐导致的异常而崩溃,但事实证明它运行得很好,已经在Linux 3.6.11(GCC 4.7.2)、WinXP(MingW)、codepad在线编译器中测试过( http://codepad.org/yOoc8ACG )
请解释结果,我猜操作系统已经做了一些事情来保存程序,仍然怀疑它是否适用于 VxWorks 或其他一些操作系统
注意:代码在基于 Intel 的机器上运行!
提前致谢 !