从程序内部复制C程序的整个bss和数据段?

时间:2018-07-06 23:55:43

标签: c memory hpc

我正在尝试为特定的HPC应用程序构建检查点重启库。为了执行检查点,我需要能够复制每个处理元素的全局和静态变量。我希望能够通过简单地获取存储所有这些变量(已初始化和未初始化)的连续内存块并将其写入其他位置来实现此目的。

我已经对Google进行了彻底的搜索,没有提出任何建议。我将非常感谢您的帮助。任何解决该问题的更好方法的建议也都受到欢迎。

1 个答案:

答案 0 :(得分:2)

取决于您的编译器,它们可能在您的堆中或二进制文件的数据部分中。我对C标准不太熟悉,无法确切地知道规范可以保证分配过程的哪些方面,但是尝试转储内存的这些部分并在以后听起来像带有许多隐藏陷阱的方法从中恢复。更不用说浪费时间浪费未初始化的内存了。

我建议您将所需的内容显式转储为JSON之类的串行格式,并在重新启动时从这些二进制文件中恢复。设置和维护此保存和还原过程将花费更多的精力,但是从长远来看,这比转储整个堆和数据节更加安全。