物理内存地址和指针地址不相同

时间:2020-06-17 19:24:17

标签: c++ windows pointers

嗨,我正在玩c ++指针,还使用Microsoft的名为RamMap的程序来检查内存的物理地址。

但是我发现 RamMap

列表中不存在 c ++变量指针的地址。

例如:

#include <cstdlib>
#include <iostream>
#include<conio.h>
using namespace std;

int main()
{
    string var1="var1";
    string * foo = &var1;
    cout<<foo;

    getch();
    return 0;
}

返回 0x61fde0 enter image description here

之后,我查看了RamMap并搜索了该地址,但找不到任何内容

enter image description here

有人可以帮助我吗?我很困惑,我发现每次重新运行程序时指针地址都不会改变

1 个答案:

答案 0 :(得分:4)

每个进程都有自己的内存视图,该视图由逻辑地址组成。它们可能对应也可能不对应于物理地址,即实际的RAM。但是,即使它们确实对应,值仍然不同。

如果不是这种情况,那么很多事情都会出错。但是最明显的一个可能是物理内存碎片的问题。想象一下,如果某个进程请求分配4MB的内存块,并且有足够的RAM可用空间,但是没有连续的4MB块。哎呀。