C++ 中的内存模型:为什么结构中的两个整数分配在同一内存位置?

Memory model in C++: Why are the two integers in struct allocated in the same memory location?

参考我在下面粘贴的 cppreference.com 处的代码片段,为什么整数 bc 分配在相同的内存位置:

struct S {
    char a;     // memory location #1
    int b : 5;  // memory location #2
    int c : 11, // memory location #2 (continued)
          : 0,
        d : 8;  // memory location #3
    struct {
        int ee : 8; // memory location #4
    } e;
} obj; // The object 'obj' consists of 4 separate memory locations

我的理解是,例如,在 1 字节 = 8 位的系统中,变量 a 将占用 1 字节。然后 b 会占用 4 个字节。如果 bc 进入相同的内存位置,将填充 8 个字节,这是否意味着 8 个 char 变量可以连续分配在相同的内存位置?

此外,如果 bc 具有相同的内存位置,程序如何知道访问哪里?

您错过了 :5:11
确保你知道他们做什么。它是创建位域的语法。 (感谢 Nate 提醒疲倦的我这个词并提供有用的 link https://en.cppreference.com/w/cpp/language/bit_field ) 基本上他们说 "only 5 and 11 bits needed, feel free to squeeze them into one int".
这假设很可能 int 在您的环境中至少为 16 位(压缩两个)或至少 24 位(压缩第三个)。

当您说 "same memory location" 时,这是正确的,它们位于相同(可能)32 位位置,但不完全位于同一内存中。它们处于不同的位置。所以系统以某种方式访问​​它们(取决于硬件而不是定义),它只使用部分位。您可能会将其视为 compiler/CPU 进行一些移位和屏蔽,但只是作为所发生情况的模型。