我正在运行一个简单的 C++ 程序来了解动态分配的内存(malloc
,realloc
和free
)。
这是我的代码片段:
void *p = malloc(10); // Allocates 10 bytes in memory; `p` is a pointer to the first byte.
cout << "The value of the pointer p is: " << p << endl;
这输出是这样的:
The value of the pointer p is: 0x7fbf36c00080
我知道十六进制数是 指向的内存位置p
,这是此分配的第一个内存位置。
在尝试粗略计算我有多少 RAM 时,我查看了该十六进制数(12 位)中的位数,并将 16 提高到该次方。
事实证明 16^12 大致等于 2.8x10^14,并且由于每个内存位置存储一个字节,这意味着我有大约 280 TB 的 RAM,即使我知道我有 8 GB。
我的计算哪里出错了?
您应该研究 Virtual memory的概念,以了解物理内存映射到进程的地址空间。
一个 64 位进程可能有指向 2 64 -1 的指针这一事实并不意味着所有这些内存都存在。该指针指向一个 内存段,该内存段 映射到计算机某处的物理内存。
只有操作系统知道您实际拥有多少内存,因此您需要使用其 API 来检索该数量。
如我的第一个维基百科链接所示: