我想测试,如果它是确定访问在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),键盘在线编译器(http://codepad.org/yOoc8ACG)
解释结果,我想操作系统已经做了一些事情来保存程序,仍然怀疑它是否适用于VxWorks或其他操作系统
注意:代码在基于Intel的机器上运行!
在此先感谢!
如果你尝试并将p和q传递给另一个函数后会发生什么?或者也许尝试访问这些位置的内存? – 2013-03-13 15:09:22
可能重复[未对齐的内存访问总是会导致总线错误?](http://stackoverflow.com/questions/1496848/does-unaligned-memory-access-always-cause-bus-errors) – ecatmur 2013-03-13 15:10:05
在SPARC上运行。 – WhozCraig 2013-03-13 15:13:19