我分配给内存中地址的值会保留吗



假设我在c++中初始化了一个值(例如10(为变量a。之后,我结束了我的程序并编码了另一个程序,在那个程序中,我声明了一个变量B,奇迹般的是,它被分配到了我在第一个程序中找到的变量1的相同地址,所以,如果我没有初始化第一个变量(A(的值,那么它的值会被赋予第二个变量(B(吗?

我试图使用cstilth库来获取特定地址的定位值,但当我尝试这样做时,我遇到了分段错误。

我的代码:

#include <cstdint>
int main()
{
uintptr_t p = 0x0001FBDC;
int value = *reinterpret_cast<int *>(p);
}

首先,您的进程几乎肯定使用虚拟内存地址。这意味着地址0x0001FBDC不一定在运行期间(甚至在单个运行期间(引用相同的物理存储器。

忽略这一点,通常情况下,您的程序必须与所有其他应用程序共享相同的物理内存(不是同时共享,但显然系统内存被所有进程重用(。但您的程序可能在内存中留下了敏感数据,并允许其他程序访问,这将是一个安全问题。

出于这个原因,通常情况下,一旦你的程序关闭,而其他程序想要使用相同的内存,操作系统就会将该部分清零,然后将其分发给其他程序。这也带来了一个很好的结果,即全局变量可以廉价地初始化为零(这是一种强制性的标准行为(。

所以,不,您不能在运行中访问相同的变量。有些操作系统允许您在进程之间分配内存和共享,因此您可能需要对此进行研究。

但是,当然,这些都不能保证会发生。您可能在没有操作系统或内存保护的嵌入式系统上运行程序,然后您可能会发现,没有被其他任何东西(其他程序、程序中的其他函数等(覆盖的特定地址保持其值。

相关内容

  • 没有找到相关文章

最新更新