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

Copy the entire bss and data segments of a C program from within the program?

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

我用 Google 彻底搜索了一下,但没有找到任何结果。如果有任何帮助,我将不胜感激。也非常欢迎任何有关解决此问题的更好方法的建议。

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

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