gpt4 book ai didi

c++ - 如何使用尾部填充?

转载 作者:行者123 更新时间:2023-11-30 02:17:54 30 4
gpt4 key购买 nike

看看这个简单的代码:

struct Foo {
short a;
char b;
};

struct Bar: Foo {
char c;
};

对于当前的编译器,sizeof(Bar) 是 6。这很正常,因为 sizeof(Foo) 是 4,并且Bar::c 被添加到其中,我们有 5 个字节,并且因为 Bar 的对齐方式是 2,所以它的大小为 6。

但是,如果 Bar 不是标准布局,则允许编译器将 c 放入 Foo,所以 sizeof(Bar) 将为 4。

实现此目的最惯用的方法是什么(侵入性修改较少,最清晰的方法)?

最佳答案

With current compilers, sizeof(Bar) is 6.

这实际上是错误的假设,即使您可以定义“当前编译器”是什么。 “标准布局”也是一个毫无意义的流行语。

如果我正确理解了您要实现的目标,#pragma pack 就是答案。您可以逐个类地指示编译器使用什么字节打包。

通常对于网络传输,您可能希望使用 1 的包装,而对于其他任何事情(内存操作、存储等),只需让编译器为您完成即可。它通常会将您的字段填充到字边界上以获得最大的访问性能(不要与缓存性能混淆)。

关于c++ - 如何使用尾部填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53071717/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com