2011-12-19 41 views
2

我有一个跨越数十个文件的C程序。我的目标是编写一个函数,当被调用时将所有全局变量保存到某个文件并退出到操作系统(Windows中的命令行)。后来,我需要程序从文件中加载全局变量并继续运行。类似休眠功能的C程序

该程序是一个单线程的exe文件,不加载任何dll。

解决此问题的直接方法是列出所有全局变量(假设我将静态转换为全局变量)并将它们转储到文件中。但这是一项单调乏味的工作,因为可能有成百上千的变量。

是否有其他解决方法,比如倾销整个数据段并稍后加载?即使我保存了数据段并将其加载回RAM,我也无法将程序变量与数据段的内存块相关联。

+1

你的程序有几千个全局变量?!如果你对设计真的很耐心,那么可以看看Emacs用'unexec'做了什么。 – chrisaycock 2011-12-19 20:46:50

+0

在Unix上,一种方法是'mmap'某个文件并在mmapped文件中分配所需的状态。 – 2011-12-19 20:55:49

+0

@AlexandreC .: Windows有没有类似的东西? – 2011-12-19 20:59:45

回答

0

现在我从来没有试过这个,我不知道它是否会工作,但... ... setjmp/longjmp保存环境并恢复它。

我认为可以使用setjmp将结构(jmp_buf)存储在一个文件中。然后当应用程序再次加载时,将jmp_bug加载回RAM并运行longjmp。

你觉得怎么样?!

+2

'setjmp'仅保存足够的信息,以便'longjmp'可以将栈放回原来调用setjmp时的位置。 – Ferruccio 2011-12-19 21:25:57