本地禁用填充

时间:2012-01-19 21:40:20

标签: c++ visual-studio visual-studio-2010

我为一些数据结构编写了一个解析器,经过几个小时的调试后我发现问题是Visual Studio没有像我说的那样解释结构。似乎使用了一些“填充”

struct foo { 
unsigned char a; //0x00
unsigned char b; //0x01
unsigned int c; //0x02
unsigned int d; //0x06
unsigned int e; //0x0A
unsigned int f; //0x0E
//0x12
};

我预计“sizeof(foo)= 4 * 4 + 2 = 18”,但我得到“sizeof(foo)= 20”。是否有可能为这个特殊结构转换填充?我试过了

__declspec(align(1)) struct foo { ...

但它不起作用。谢谢你的帮助。

2 个答案:

答案 0 :(得分:35)

使用#pragma pack指令:

#pragma pack(push, 1)
struct foo { 
  // etc..
};
#pragma pack(pop)

答案 1 :(得分:2)

Visual Studio 2010有#pragma pack来执行您正在寻找的内容。