【发布时间】:2012-09-27 12:56:17
【问题描述】:
可能重复:
Why isn't sizeof for a struct equal to the sum of sizeof of each member?
我试图理解位域的概念。 但我无法找到为什么 CASE III 中以下结构的大小为 8 个字节。
案例一:
struct B
{
unsigned char c; // +8 bits
} b;
sizeof(b); // 输出:1(因为 unsigned char 在我的系统上占用 1 个字节)
案例二:
struct B
{
unsigned b: 1;
} b;
sizeof(b); // Output: 4 (because unsigned takes 4 bytes on my system)
案例三:
struct B
{
unsigned char c; // +8 bits
unsigned b: 1; // +1 bit
} b;
sizeof(b); // Output: 8
我不明白为什么案例 III 的输出为 8。我期待 1(char) + 4(unsigned) = 5。
【问题讨论】:
-
您看到的是结构填充。在这个网站上搜索这些术语,你会发现很多信息
-
unsigned char在每个系统上占用一个字节。 -
@CarlNorum: 是的,但这并不意味着带有一个
char的struct(例如案例I)也占用一个字节。不同的编译器可以向结构添加三个字节的填充。 -
@MSalters,是的,当然可以。我不确定我是否理解您的意思?
标签: c++ c sizeof bit-fields structure-packing