首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪些值存储在对齐的struct/class对象的填充字节中

哪些值存储在对齐的struct/class对象的填充字节中
EN

Stack Overflow用户
提问于 2019-12-30 09:12:14
回答 2查看 459关注 0票数 2
代码语言:javascript
复制
struct Data
{
    std::uint32_t b;
    char a;
};

数据类型由4个字节对齐,因此(数据)的大小为== 8。

但是,以5-7字节为单位的值是多少呢?它是默认的零吗?

EN

回答 2

Stack Overflow用户

发布于 2019-12-30 09:17:11

它实际上取决于一些事情,所有细节都在C++标准[dcl.init]中详细说明。

根据存储时间、各种类型的构造函数的存在等,其中的各个部分最终都是默认初始化、零初始化或值初始化。

默认初始化意味着整个变量将是一些任意值,而零初始化则会初始化所有成员,并将填充字节设置为零。

因此,Data d1;static Data d2;不一定有相同的填充字节。

值初始化要复杂一些,因为它在调用构造函数(如果存在的话)之前首先有效地选择了默认或零初始化。

但底线是,这可能并不重要。如果填充的内容很重要,您应该将该空间“注册”为真正的成员变量,以便您可以使用它们(并使它们正确初始化)。填充在变量的“值”中非常不重要,除非您做了一些疯狂的事情,比如memcmp,或者对它占用的整个内存块运行校验和:)

票数 2
EN

Stack Overflow用户

发布于 2019-12-30 10:04:43

我一直认为它是不可预测的,但在结构的对象有静态存储持续时间的情况下仍然不确定。

因此,我搜索了C标准和C++标准中是否明确提到了这一点(因为您使用的是C和C++)。

It 是C标准(C99、C11和C18)中提到的

J.1未指定的行为

  • 在结构或联合中存储值时填充字节的值(6.2.6.1).

对于C++,我无法发现在C++标准中任何地方都提到过它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59528237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档