gpt4 book ai didi

c++ - 奇怪的 sizeof() 结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:09:51 25 4
gpt4 key购买 nike

当我在 Mac 上运行 sizeof(r) 时。它表示 sizeof(r) = 1。我的理解是 union 的大小是其最大元素的大小。在这种情况下,最大的元素不应该是 struct 吗?

union
{
struct
{
char i:1;
char j:2;
char m:3;
}s;

char ch;
}r;

最佳答案

您的 union 体由两部分组成,一个结构体和一个字符。 union 的大小,因为它共享内存,所以是最大元素的大小加上它所粘附的任何填充的大小(在您的情况下为 0 字节)。

首先,让我们看看 ideone 报告的大小:
http://ideone.com/LAhop

好的,两者都是1。因此, union 的大小也必须是1。

该结构由位域组成。一位是 1 位,一位是 2 位,一位是 3 位。这给出了一个字节中 8 位中的总共 6 位。因为无论如何它都必须至少是一个字节(位域的大小实际上并不是以位为单位),因此大小为 1。

至于 char,这是 C++11 标准在 § 3.9.1/1 [basic.fundamental] 中的说法:

Objects declared as characters (char) shall be large enough to store any member 
of the implementation’s basic character set.

对于几乎所有平台,这是一个字节。
这是一个字节。

关于c++ - 奇怪的 sizeof() 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11644063/

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