【问题标题】:Hibernate-like functionality for C programC 程序的类似 Hibernate 的功能
【发布时间】:2011-12-19 20:44:05
【问题描述】:

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

该程序是一个不加载任何 DLL 的单线程 exe。

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

还有其他方法吗,比如转储整个数据段并稍后加载?即使我保存了数据段并设法将其加载回 RAM,我也很难将程序变量与数据段的内存块相关联。

【问题讨论】:

  • 你的程序有上千个全局变量?!如果你真的对设计有那么大的热情,那么不妨看看 Emacs 对 unexec 做了什么。
  • 在 Unix 上,一种方法是 mmap 某个文件并在 mmapped 文件中分配所需的状态。
  • @AlexandreC.: Windows 有类似的东西吗?
  • MapViewOfFile 但是(缺乏对其他约束的了解)这是错误问题的糟糕解决方案。

标签: c assembly


【解决方案1】:

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

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

你怎么看?!

【讨论】:

  • setjmp 只保存足够的信息,以便longjmp 可以将堆栈展开回最初调用setjmp 时的位置。
猜你喜欢
  • 2012-10-04
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
相关资源
最近更新 更多