【问题标题】:Locally disable padding本地禁用填充
【发布时间】:2022-01-08 04:42:15
【问题描述】:

我为某些数据结构编写了一个解析器,经过数小时的调试后,我发现问题是 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 { ...

但它不起作用。感谢您的帮助。

【问题讨论】:

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


【解决方案1】:

为此使用#pragma pack 指令:

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

【讨论】:

    【解决方案2】:

    Visual Studio 2010 有 #pragma pack 来做你正在寻找的事情。

    【讨论】:

    • 但这不会影响所有结构吗?我只希望它在本地用于那个结构。
    • 您可以在之后恢复它 - 您是否阅读过该文档?
    • 您可以使用#pragma pack push/pop 来解决这个问题。只需在结构体之前 push 并在结构体之后弹出即可。
    猜你喜欢
    • 2011-04-10
    • 1970-01-01
    • 2021-06-16
    • 2013-03-22
    相关资源
    最近更新 更多