C++ 本地禁用填充
我为一些数据结构编写了一个解析器,经过数小时的调试,我发现问题在于VisualStudio没有按照我所说的解释结构。似乎使用了一些“填充” 我期望“sizeof(foo)=4*4+2=18”,但我得到了“sizeof(foo)=20”。是否有可能只为这个特殊结构关闭填充?我试过了C++ 本地禁用填充,c++,visual-studio,visual-studio-2010,C++,Visual Studio,Visual Studio 2010,我为一些数据结构编写了一个解析器,经过数小时的调试,我发现问题在于VisualStudio没有按照我所说的解释结构。似乎使用了一些“填充” 我期望“sizeof(foo)=4*4+2=18”,但我得到了“sizeof(foo)=20”。是否有可能只为这个特殊结构关闭填充?我试过了 __declspec(align(1)) struct foo { ... 但它不起作用。感谢您的帮助。Visual Studio 2010必须完成您需要的工作。请使用#pragma pack指令: #pragma
__declspec(align(1)) struct foo { ...
但它不起作用。感谢您的帮助。Visual Studio 2010必须完成您需要的工作。请使用#pragma pack
指令:
#pragma pack(push, 1)
struct foo {
// etc..
};
#pragma pack(pop)
但这不会影响所有结构吗?我只想让它在本地用于一个结构。你可以在事后还原它-你读过文档了吗?你可以使用#pragma pack push/pop来解决这个问题。只需在结构之前按一下,然后在结构之后按一下。我想。你是用
/zp1
编译的吗?@MartinBroadhurst可以全局禁用填充,hans的解决方案是有效的。
#pragma pack(push, 1)
struct foo {
// etc..
};
#pragma pack(pop)