如何从RAM中读取变量值?

时间:2015-10-27 07:13:52

标签: c ipc dynamic-memory-allocation

我使用动态内存分配编写了一个程序。我不使用SaleDate函数释放内存,仍然在地址处,变量的值存在于那里。

现在我想重用这个值,我希望看到来自另一个进程的RAM中存在的所有变量值。

有可能吗?

free

我希望另一个程序读取a的值,因为它仍然在内存中,因为main函数是无限的。怎么办呢?

4 个答案:

答案 0 :(得分:3)

这个问题显示了对至少两个主题的误解。

第一个是虚拟地址空间和内存保护,正如RobertL在他的回答中所述。在现代操作系统上,您无法访问属于另一个进程的内存(即使您知道物理地址,您也不会这样做,因为所有用户空间进程都在地址上工作在他们的私人虚拟地址空间)。尝试访问未映射到地址空间的内容的结果将是分段错误。 Read more on Wikipedia

第二个是C标准的范围。它不了解流程。 C是根据执行程序的抽象机定义的(并且此程序)。定义变量的范围和生命周期,相应的最大值是全局范围静态存储持续时间。所以是的,只要您的程序运行,您的变量将继续存在,但它的范围将是此程序

当您了解这一点时,您会看到:即使在使用单个全局地址空间且根本没有内存保护的平台上,您也永远无法根据C标准访问其他程序的变量。您可能会以某种方式将指针值传递给您的其他程序并使用它,也许它会起作用,但它会是未定义的行为

这就是为什么操作系统提供进程间通信的方法,如共享内存(接近你想要的)和管道

答案 1 :(得分:0)

当您从main()返回时,该过程会释放所有获取的资源,因此您不能。看看this

答案 2 :(得分:0)

首先,当您关闭进程时,您分配的内存将完全释放。您可以通过将一个进程写入文件(如.dat文件)而另一个进程从中读取来避免这种情况。还有other ways

但一般来说,在正常情况下,当您的进程终止时,将释放现有内存。

如果您尝试从进程内的其他进程访问内存,则很可能会出现分段错误,因为大多数操作系统都会保护进程不会互相干扰内存。

答案 3 :(得分:0)

这取决于操作系统。大多数现代多任务操作系统保护进程彼此。硬件设置为禁止进程查看其他进程内存。例如,在Linux和Unix上,为了在内存中的程序之间进行通信,您需要使用操作系统服务进行处理"进程间"通信,例如共享内存,信号量或管道。