swd*_*don 2 c++ memory bit-fields
参照在代码片段cppreference.com这我下面粘贴为什么整数b,并c在相同的内存位置分配:
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
Run Code Online (Sandbox Code Playgroud)
我的理解是,例如,在1字节= 8位的系统中,变量a将占用1字节。然后b需要说4个字节。如果同时b并c在相同的内存位置这将填补8个字节去,这是否意味着8个char变量可以在相同的内存位置中持续地分配呢?
另外,程序如何知道要访问的位置b或c它们是否具有相同的内存位置?
您错过了:5和:11。
确保您知道他们在做什么。这是创建位域的语法。(感谢Nate提醒我这个词让我感到疲倦,并提供了有用的链接https://en.cppreference.com/w/cpp/language/bit_field)基本上,他们说“只需要5位和11位,就可以随意挤压他们合而为一int。
这假定环境中的可能性int极小,至少为16位(挤压两个)或至少24位(挤压第三个)。
当您说“相同的内存位置”时,这是正确的,它们位于相同的(可能)32位位置,但不完全位于同一内存中。它们是不同的位。因此,系统以某种方式(取决于硬件且未定义)访问它们,它们仅使用部分位。您可能会认为它是编译器/ CPU进行了一些移位和屏蔽,但只是作为发生情况的模型而已。