我试图理解C ++中的指针。

那里有一个代码示例:

int main(void) {
    int var = 8;
    void* pointer = &var; // 0x00A0FB64
}


并且有一个内存映像:
enter image description here

0x00A0FB64  08 00 00 00 cc cc cc cc ca c8 a0 1d 84 fb a0 00 ee 2b bf 00 01 00 00 00 20 53 12 01 00 5a 12 01 dc fb a0 00 50 2a bf 00


十六进制数字系统中有08 00 00 00,当我们将其转换为二进制数字系统时:

我们将得到1000 00000000 00000000 00000000

整数的大小应为32位,但只有28位。

这怎么可能?

我正确的整数的内存表是(?):

0x00A0FB64 -> 08
0x00A0FB65 -> 00
0x00A0FB66 -> 00
0x00A0FB67 -> 00


谢谢你的帮助!

最佳答案

08是二进制的1000。但是,00001000也是如此。

因此,内存实际上变为:00001000 00000000 00000000 00000000,它是32位。



附带的问题是,从技术上讲are no guaranteed sizes in C++,只有int至少为16位(其他类型的其他保证)。

因此,理论上,只要满足对类型大小的所有其他要求,它就可以是28位。仅仅是在实践中,您可能不会有28位,而更可能是32位。

关于c++ - 了解指针和内存管理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58358436/

10-11 16:43