关于 struct 和 union 存储时内存边界对齐的问题(二)

新的博客中好像修改以前写的博客的功能没有了。
一个是在DEBUG版本中好像填充字节都是0xCC,0xCC是int 3中断指令的机器码。在release版本中,填充的字节好像没什么规律。
下面是winnt.h中的那段代码:
// winnt.h  line 4947
#ifndef _MAC

#include "pshpack4.h"                   // 4 byte packing is the default

#define IMAGE_DOS_SIGNATURE                 0x5A4D      // MZ
#define IMAGE_OS2_SIGNATURE                 0x454E      // NE
#define IMAGE_OS2_SIGNATURE_LE              0x454C      // LE
#define IMAGE_VXD_SIGNATURE                 0x454C      // LE
#define IMAGE_NT_SIGNATURE                  0x00004550  // PE00

#include "pshpack2.h"                   // 16 bit headers are 2 byte packed

#else

#include "pshpack1.h"

#define IMAGE_DOS_SIGNATURE                 0x4D5A      // MZ
#define IMAGE_OS2_SIGNATURE                 0x4E45      // NE
#define IMAGE_OS2_SIGNATURE_LE              0x4C45      // LE
#define IMAGE_NT_SIGNATURE                  0x50450000  // PE00
#endif
从上面的定义可以看到,4字节对齐和1字节对齐的时候那些宏的定义的字节顺序是不一样的。在intel芯片中存储是低地址存储低字节的,所以4字节对齐的时候,0x0102 在内存中存储的应该是 0x0201,这挺正常。可是1字节对齐时全部是按照人的阅读顺序定义的了。我想可能是因为内存边界对齐会影响到数据存储的字节顺序,可是写程序测试发现无论是按多少字节的内存边界对齐,只会影响到结构的大小,而不会影响到数据存储的字节顺序。

你可能感兴趣的:(c,struct,dos,测试,OS,存储)