考虑到我已经执行了一个程序并创建了一个类的实例,
MyClass mClass = new MyClass()
执行后,参考空间将存储在堆空间中。现在,我想编写一个程序,该程序可以访问堆空间以从先前创建的另一个程序实例中检索数据。我可以吗?
谢谢
没有您将永远无法访问另一个进程的内存。
但是,一个进程可以建立另一个进程可以读取的shared memory区域,但这需要这些进程之间进行合作。而且,它仍然不能使进程直接访问另一个进程的堆,它只能看到另一个进程显式移动到共享区域中的内容(因此,在您的示例中,您必须将数据从堆复制到共享内存,或者将其放在共享内存中开始,这可能不是一个好主意。]
请注意,虽然您无法更改new
的行为(据我所知),但没有什么阻止您编写代码来手动管理堆的;从这种意义上讲,可以将堆直接放置在共享内存区域中。这是否明智是另一个问题,并且显然高度依赖于上下文。
为了完全了解操作系统如何管理内存,您必须了解virtual memory和memory management hardware(不过,您可能想比Wikipedia更深入)。
好吧,我认为您可以使用套接字来访问堆空间。我希望这能奏效。