c - 从程序中复制 C 程序的整个 bss 和数据段?
问题描述
我正在尝试为特定的 HPC 应用程序构建检查点重启库。要执行检查点,我需要能够复制每个处理元素的全局和静态变量。我希望能够通过简单地抓取所有这些变量(已初始化和未初始化)存储的连续内存块并将其写入其他地方来做到这一点。
我已经彻底谷歌了,还没有想出任何东西。如果有任何帮助,我将不胜感激。任何有关解决此问题的更好方法的建议也非常受欢迎。
解决方案
根据您的编译器,这些可能在您的堆中或二进制文件的数据部分中。我对 C 标准不够熟悉,无法确切知道规范保证了分配过程的哪些方面,但是尝试转储这些内存部分并稍后从它们恢复听起来像是一种有很多隐藏陷阱的方法。更不用说可能浪费时间来获取未初始化的内存了。
我建议您改为将所需的内容明确转储为 JSON 等串行格式,并在重新启动时从这些二进制文件中恢复。设置和维护这个保存和恢复过程需要更多的努力,但我认为从长远来看,它比转储整个堆和数据部分更安全。
推荐阅读
- javascript - 如何从父级取消选中子Vue中已回答的问题
- javascript - 创建一个对象,其实例将在对象更改时更新
- python - Python:MySQLdb cursorclass 设置为 MySQLdb.cursors.DictCursor 时返回元组而不是字典
- reactjs - React 组件和 useState
- arrays - Swift - 更新嵌套字典中特定项目的值
- sql - 在 PostgreSQL 中创建触发器
- file - 如何用 Rust 创建二进制文件?
- c# - 在 aspx 网页中从后面调用函数
- python - 包含字母和整数的 Python 列表
- database - DB Sharding:数据迁移到另一台机器