0

当我使用 C / C++ 编写一个简单的程序时,我得到的地址范围是多少?我的意思是,我可以指向任何我想要的地方......比如:

void* ptr = (int*)0xFFFFFFFF;

该指针实际上指向哪里?我猜它不是主存储器中的真实地址,而只是我程序的“覆盖”地址。

谁能给我解释一下?运行我自己的 C 程序时,我得到的地址范围是多少(例如在 Windows 中)?如果我愿意,我真的可以访问其他程序的地址范围吗?

谢谢!

4

3 回答 3

4

您的程序在虚拟地址空间中运行,并且指针指向虚拟内存中的位置。所以不,你不能指望在另一个程序中变出一个与另一个程序具有相同数值的指针,并让它们都指向相同的实际内存。相反,如果您这样做,您的程序可能会崩溃或出现其他异常行为(但请注意:这是未定义的行为,因此任何事情都可能发生,并且取决于平台)。

于 2013-08-10T08:08:25.543 回答
1

你不能访问另一个程序的内存。操作系统将它们分开。唯一可能的方法是通过一些正式的机制,如共享内存或某种物理内存映射。

于 2013-08-10T08:13:38.167 回答
0

有关 Windows 操作系统中虚拟地址空间的更多信息:http ://www.tenouk.com/WinVirtualAddressSpace.html

于 2013-08-10T08:12:33.583 回答