【问题标题】:Making variables persist even after program termination使变量即使在程序终止后仍然存在
【发布时间】:2012-07-27 13:42:58
【问题描述】:

我希望有一个变量在程序终止后仍然存在。换句话说,即使在应用程序退出主函数后,我也希望变量保留在内存中。因此,如果我的应用程序再次启动,它可以直接从内存中访问该变量。这甚至可能吗?将动态分配,例如array=new int[size],你能做到吗?

【问题讨论】:

  • 什么平台/操作系统?这在标准 C++ 中是不可能的,但很多平台都提供了类似的功能。
  • Windows 7. 哪些平台允许这样做?
  • Linux/UNIX 共享内存段浮现在脑海中。您可以使用内存映射文件进行操作,但无论如何它在重新启动后仍然存在。显然你不能new[] 来分配东西,但如果你小心的话,你可以使用自定义分配器(丑陋的)或放置新的。参见例如boost interprocess
  • 我注意到在 GPU 上分配内存时会发生这种情况。虽然我不确定这是一个可靠的“功能”。我也不明白为什么会这样。

标签: c++ persist


【解决方案1】:

不,所有内存都由操作系统在进程终止时回收。你必须把你想要的东西保存到一个文件中。

【讨论】:

  • 这不一定是真的。如果您在没有 MMU 的硬件上运行,那么您的所有内存都是物理内存,您的值将保留在内存中,直到您或其他人更改它。当然,您还需要知道内存映射,以便将其放在安全的地方...
【解决方案2】:

这是不可能的。您必须将数据存储在文件或系统首选项中,以便在下次启动时访问它

【讨论】:

    【解决方案3】:

    免责声明: 将值存储到文件或使用诸如QSettings 之类的框架功能应该优于以下方法。

    如果您真的希望您的变量保留在内存中,并且如果您可能会在重新启动时冒着丢失这些值的风险,那么请向操作系统请求共享内存

    如果您有一个兼容 POSIX 的平台,例如 Linux 或 Windows,请使用POSIX functions。引用手册:

    POSIX 共享内存对象具有内核持久性:共享内存对象将一直存在,直到系统关闭,或者直到所有进程都取消映射该对象并使用shm_unlink 将其删除。

    请注意,这会引入一种内存泄漏:您的变量将消耗 即使在应用程序终止后也能保留内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 2021-03-06
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      相关资源
      最近更新 更多