【问题标题】:How do I save the memory state of a C program to jumpstart later如何保存 C 程序的内存状态以供以后快速启动
【发布时间】:2013-10-02 18:48:59
【问题描述】:

在一个大型复杂的 C 程序中,我想将静态变量、全局结构和动态分配的变量使用的所有内存的内容保存到一个文件中。那些内存变量超过10,000个。

C程序只有单线程,没有文件操作,程序本身没有那么复杂(计算复杂)。

然后,在程序的同一执行中,我想从这个保存的状态初始化内存。

如果这是可能的,有人可以提供一种方法来实现这一点吗?

【问题讨论】:

    标签: memory save state


    【解决方案1】:

    您必须定义一个结构来保存所有数据,然后您必须实现一个函数将其保存到文件中。

    类似这样的:Saving struct to file

    但是请注意,这种方法是最简单的,但完全没有可移植性。

    评论后编辑:基本上,您想要做的是保存程序中发生的任何事情,然后在加载后重新启动它。我认为这不可能以任何简单的方式实现。您必须了解“您的申请状态”的含义。 想一想:对内存进行转储不仅可以保存数据,还可以保存当前的指令指针。因此,有了那个“愚蠢”的转储,您还可以保存当前正在运行的实际指令。还有更多你真的不想关心的并发症。

    您正在考虑的最接近的事情是在虚拟机中运行程序。如果您暂停虚拟机,执行状态将被“保存”,但每当您重新启动虚拟机时,程序将在您暂停它的完全相同的执行点重新启动。

    如果配置分散在应用程序中,您仍然可以访问用于保存所有内容的全局结构。 但是您仍然必须了解您的程序并确定您必须保存的内容。没有捷径可走。

    【讨论】:

    • 感谢您的回答。但我想知道的是如何定义一个结构来保存我的所有数据。我要保存的变量分散在数百个函数中。所以我认为如果我可以保存和加载堆栈区或堆区内存,它可以更容易,但我找不到解决方案怎么能。
    • 您当然可以尝试将堆栈和堆保存到文件中,但这不考虑静态/全局数据。
    猜你喜欢
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    相关资源
    最近更新 更多