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

从程序中复制整个bss和C程序的数据段?,c,memory,hpc,C,Memory,Hpc,我正在尝试为特定的HPC应用程序构建一个检查点重启库。要执行检查点,我需要能够复制每个处理元素的全局和静态变量。我希望能够通过简单地获取存储所有这些变量(初始化的和未初始化的)的连续内存块并将其写入其他地方来实现这一点 我在谷歌上搜索得很彻底,什么都没找到。如果有任何帮助,我将不胜感激。任何关于解决此问题的更好方法的建议都是非常受欢迎的。根据编译器的不同,这些建议可能在堆中或二进制文件的数据部分。我对C标准不太熟悉,不知道该规范具体保证了分配过程的哪些方面,但尝试转储这些内存部分并在以后从中进行

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


我在谷歌上搜索得很彻底,什么都没找到。如果有任何帮助,我将不胜感激。任何关于解决此问题的更好方法的建议都是非常受欢迎的。

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


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

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


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

多线程还是单线程?如果是多线程的,您将如何确保检查点时的一致性?这里是否涉及操作系统?要执行检查点,我需要能够复制每个处理元素的全局和静态变量。您不需要以这种方式创建检查点,事实上,我建议为HPC应用程序创建检查点是一种不同寻常的方式。我建议更常见的做法是编写应用程序代码,将程序状态保存到磁盘以支持重新启动。多线程还是单线程?如果是多线程的,您将如何确保检查点时的一致性?这里是否涉及操作系统?要执行检查点,我需要能够复制每个处理元素的全局和静态变量。您不需要以这种方式创建检查点,事实上,我建议为HPC应用程序创建检查点是一种不同寻常的方式。我建议编写应用程序代码以将程序状态保存到磁盘以支持重新启动更为常见。在我的情况下,这将需要更多的努力--我正在尝试将此功能构建到一个大型、复杂的应用程序中,由比我更精通CS各个方面的人编写。我曾希望找到一种方法来避免通过手动备份我需要的每一个状态,但你是对的:它更安全、更明智。在我的情况下,这将需要更多的努力——我正试图将此功能构建到一个大型、复杂的应用程序中,由比我更精通CS各个方面的人编写。我曾希望找到一种方法来避免通过手动备份我需要的每个状态,但你是对的:这样更安全、更明智。