底层指针和内存管理

Understaning pointers & memory management

本文关键字:内存 管理 指针      更新时间:2023-10-16

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

这里有一个小的代码示例:

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

还有一个记忆的图像: 在此处输入图像描述

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 位。


附带问题,从技术上讲,C++没有保证大小,只有int至少为 16 位(以及其他类型的保证(。

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