【问题标题】:C++ - preserve memory after app has been closedC++ - 应用程序关闭后保留内存
【发布时间】:2016-03-20 09:29:08
【问题描述】:

我有一个处理数据的 C++ 应用程序。 让我们说:

download dataA - run app to process A
download dataB - run app to process B
...

现在我需要在 B 运行中访问 A 生成的数据。我可以将它们存储在临时文件或数据库中,但这会减慢速度。有没有办法将 A 的输出保存在内存中并在 B 中再次打开?

我无法下载数据然后运行应用程序,这是一个串行处理。

【问题讨论】:

  • 您能详细说明“但它会减慢速度”吗?我们在谈论多少数据?什么种类数据?如果是“串行处理”,您是否考虑过使用管道和正常的标准输出/输入?
  • 大约 10GB 的数据,浮点数的 2D 矩阵
  • 那么除非你有至少 10GB 或可用内存,否则真的没有办法过去使用文件。
  • 我有64GB RAM,所以这个没有问题
  • 对了,你退出第一个程序来运行第二个程序吗?即使使用 10GB 管道,仍然应该可以使用,例如./program_a | ./program_b.

标签: c++ caching memory memory-management


【解决方案1】:

这取决于操作系统。在 Linux 上,您可以将数据存储在共享内存中,即使没有应用程序使用它也是持久的。在Windows上也有共享内存,但是如果没有应用程序使用它会自动回收,所以一旦程序A结束,数据就会丢失。

【讨论】:

    【解决方案2】:

    这可以通过使用共享内存来完成。这取决于您的操作系统。

    如果您使用的是 Windows: https://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspx

    如果您使用的是 Linux: https://beej.us/guide/bgipc/output/html/multipage/mmap.html

    但还有另一种选择,使用 Boost.Interprocess 工具: http://www.boost.org/doc/libs/1_60_0/doc/html/interprocess/sharedmemorybetweenprocesses.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      相关资源
      最近更新 更多