【问题标题】:C/C++ any OS memory management API : hints to use swap [closed]C/C++ 任何操作系统内存管理 API:使用交换的提示 [关闭]
【发布时间】:2021-02-06 07:00:09
【问题描述】:

我正在使用一个占用大量内存的库(例如 LightGBM)开发软件。

我正在开发一种数据科学软件,该软件具有在不询问数据时动态减少 RAM 使用量的属性,并在必要时根据我们的需要从磁盘重新加载它,这是一种高级且可配置的交换,总结一下. 因此,当我调用外部代码时,我们除了内存遵循同样的要求。

在处理庞大的数据集时,内存使用量可能会进一步增加可用内存,他的想法是限制内存使用量以避免卡在 100% 的内存使用量。 只要我不想在 LightGBM 的代码中修改内存管理,因为这意味着每次我想更新时都要选择一个特定的版本并重新调整代码。在我的软件中,我可以以编程方式限制(以及以后发布)我的应用程序的物理 RAM 使用,以强制交换吗?

例外的伪代码:

some_function_before();
some_API::please_use_swap(/*threshold=*/16);
some_process_with_heavily_memory_usage();
some_API::end_requirement();
some_function_after();

如果有其他方法可以解决这个问题,我当然会选择它。

谢谢。

【问题讨论】:

  • “我的软件作为动态减少 RAM 使用的属性...” 有吗?还是您正在努力实现这一目标?
  • “一种高级且可配置的交换总结”高级如何?如何配置?
  • “一旦我无法处理 LightGBM 的内存管理......”那么在特定时间点发生这种情况......?
  • 这是询问“我能否以编程方式限制(以及以后发布)我的应用程序的物理 RAM 使用以强制交换?”的一种复杂方式。这就是我的理解。但是您也不想更改应用程序代码...我还是迷路了。
  • 另外,any 是一个 C++ 标准库头文件。所以在问题标题中看到<any> 有点令人困惑(问题主体没有提及它)。因此,请考虑将您的标题编辑为更清晰的内容。

标签: c++ c memory-management operating-system


【解决方案1】:

Windows 上有这样的 API:SetProcessWorkingSetSize。您说明要使用多少物理 RAM;其余的可以被调出。

正常情况下,这只是一个提示。 Windows 可能会认为有足够的 RAM 并完全忽略您的提示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多