嗨,我正在玩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;
}
之后,我查看了RamMap并搜索了该地址,但找不到任何内容
有人可以帮助我吗?我很困惑,我发现每次重新运行程序时指针地址都不会改变
答案 0 :(得分:4)
每个进程都有自己的内存视图,该视图由逻辑地址组成。它们可能对应也可能不对应于物理地址,即实际的RAM。但是,即使它们确实对应,值仍然不同。
如果不是这种情况,那么很多事情都会出错。但是最明显的一个可能是物理内存碎片的问题。想象一下,如果某个进程请求分配4MB的内存块,并且有足够的RAM可用空间,但是没有连续的4MB块。哎呀。