【问题标题】:How to access heap space of a program by using another program?如何使用另一个程序访问一个程序的堆空间?
【发布时间】:2020-04-25 19:09:04
【问题描述】:

假设我执行了一个程序并创建了一个类的实例,

MyClass mClass = new MyClass()

执行后,参考空间将存储在堆空间中。现在我想编写一个程序,它可以访问堆空间以从另一个程序的先前创建的实例中检索数据。 可以吗?

谢谢

【问题讨论】:

    标签: memory operating-system heap-memory


    【解决方案1】:

    据我所知,在实践中,没有。如果您授予其他程序管理员权限,您可以读取另一个程序的内存,但据我所知,无法确定该程序的堆位于何处。 (可能有一些 hacky 方法可以实现这一点,但不会很漂亮或可靠)。

    但是,一个进程可以建立一个shared memory 区域,另一个进程可以读取或使用套接字,但这需要进程之间的合作。此外,它仍然不能让进程直接访问另一个进程的堆 - 您的程序只能看到其他进程允许它看到的内容。

    请注意,虽然您无法更改 new 的行为(据我所知),但没有什么可以阻止您编写代码来手动管理堆;从这个意义上说,可以将堆直接放在共享内存区域中。这是否明智是另一个问题,显然,这高度依赖于上下文。

    为了完全了解操作系统如何管理内存,您必须了解 virtual memorymemory management hardware(不过,您可能想要比维基百科更深入地了解)。

    【讨论】:

      【解决方案2】:

      我认为您可以使用套接字来访问堆空间。我希望这行得通。

      【讨论】:

        猜你喜欢
        • 2022-11-23
        • 2012-06-14
        • 2013-03-17
        • 2011-09-02
        • 2019-12-30
        • 2012-05-29
        • 2012-06-23
        • 2023-03-23
        • 2018-09-22
        相关资源
        最近更新 更多