Sizeof 报告类型定义结构的不正确大小 - C++

发布于 2024-10-06 18:25:54 字数 254 浏览 7 评论 0原文

我的应用程序有一个已定义的结构:

typedef struct zsSysVersionMsg_tag
{
    WORD cmd;
    BYTE len;
} zsSysVersionMsg_t;

我希望 sizeof(zsSysVersionMsg_t) 的计算结果为 3。但是,当我运行我的应用程序时,它的计算结果为 4。有人能解释一下这是为什么吗? (我真的需要它来评估 3。) 谢谢。

My application has a defined structure:

typedef struct zsSysVersionMsg_tag
{
    WORD cmd;
    BYTE len;
} zsSysVersionMsg_t;

I would expect sizeof(zsSysVersionMsg_t) to evaluate to 3. However, when I run my application it evaluates to 4. Can someone explain why this is? (I really need it to evaluate to 3.) Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦途 2024-10-13 18:25:54

大多数平台都会“对齐”和“填充”结构,以便它们精确地在字边界上开始和结束。这样做是为了提高内存性能。

假设您使用的是 Windows,您可以设置自己的对齐方式。在您的情况下,您想要对齐单个字节,因此请执行以下操作:

#pragma pack( push, 1 )
typedef struct zsSysVersionMsg_tag
{
    WORD cmd;
    BYTE len;
} zsSysVersionMsg_t;
#pragma pack( pop )

Most platforms will "align" and "pad" structures so that they begin and end exactly on a word boundary. This is done to improve memory performance.

Assuming you are on Windows, you can set your own alignment. In your case, you want to align on single bytes, so do this:

#pragma pack( push, 1 )
typedef struct zsSysVersionMsg_tag
{
    WORD cmd;
    BYTE len;
} zsSysVersionMsg_t;
#pragma pack( pop )
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文