假设我在c++中初始化了一个值(例如10(为变量a。之后,我结束了我的程序并编码了另一个程序,在那个程序中,我声明了一个变量B,奇迹般的是,它被分配到了我在第一个程序中找到的变量1的相同地址,所以,如果我没有初始化第一个变量(A(的值,那么它的值会被赋予第二个变量(B(吗?
我试图使用cstilth库来获取特定地址的定位值,但当我尝试这样做时,我遇到了分段错误。
我的代码:
#include <cstdint>
int main()
{
uintptr_t p = 0x0001FBDC;
int value = *reinterpret_cast<int *>(p);
}
首先,您的进程几乎肯定使用虚拟内存地址。这意味着地址0x0001FBDC
不一定在运行期间(甚至在单个运行期间(引用相同的物理存储器。
忽略这一点,通常情况下,您的程序必须与所有其他应用程序共享相同的物理内存(不是同时共享,但显然系统内存被所有进程重用(。但您的程序可能在内存中留下了敏感数据,并允许其他程序访问,这将是一个安全问题。
出于这个原因,通常情况下,一旦你的程序关闭,而其他程序想要使用相同的内存,操作系统就会将该部分清零,然后将其分发给其他程序。这也带来了一个很好的结果,即全局变量可以廉价地初始化为零(这是一种强制性的标准行为(。
所以,不,您不能在运行中访问相同的变量。有些操作系统允许您在进程之间分配内存和共享,因此您可能需要对此进行研究。
但是,当然,这些都不能保证会发生。您可能在没有操作系统或内存保护的嵌入式系统上运行程序,然后您可能会发现,没有被其他任何东西(其他程序、程序中的其他函数等(覆盖的特定地址保持其值。