C++更改最大RAM限制

C++ Change Max RAM Limit

本文关键字:RAM 限制 C++      更新时间:2023-10-16

如何更改程序的最大RAM量?我总是内存不足(不是系统最大值,ulimit最大值(,我不想更改全局内存限制。我环顾四周,发现vlimit((函数可能会起作用,但我不确定如何使用它

编辑:我在linux 2.6.38-11-generic上这不是内存泄漏,我必须为给定的类分配100k,没有办法绕过它。

您是否在堆栈上分配了对象,并且实际上达到了堆栈限制?

例如,你写这样的东西吗:

void SomeFunction() {
    MyObject aobject[100000];
    // do something with myobject
}

此数组将在堆栈上分配。一个更好的解决方案——为您自动化堆分配——是编写

void SomeFunction() {
    std::vector<MyObject> veccobject(100000); // 100.000 default constructed objects
    // do something with myobject
}

如果出于某种原因,您确实想要一个更大的堆栈,请参阅编译器文档以获得适当的标志:

如何增加gcc可执行堆栈的大小?

你能用c++设置调用堆栈的大小吗?(与2008年相比(

你可能想考虑一下:

你什么时候担心堆栈大小?

您明白为什么要达到RAM限制吗您确定没有内存泄漏吗(如果确实有泄漏,那么在长时间运行应用程序时,您将需要越来越多的RAM(。

假设是一台Linux机器,您可以使用valgrind来查找和调试内存泄漏,也可以使用Boehm的保守垃圾收集器来避免它们。

如果这些限制是由系统管理员强加给您的,那么没有-您被卡住了。如果你是ulimit自己,当然——只要提高软限制和硬限制。

正如Chris在评论中指出的,如果您是一个特权流程,您可以使用setrlimit来提高流程中的硬限制。然而,有人假设,如果你处于ulimit之下,那么你不太可能是一个特权进程。

如果您有权限,您可以使用setrlimit调用(它取代vlimit(在程序开始时设置限制。这只会影响该程序及其后代。

#include <sys/time.h>
#include <sys/resource.h>
int main() {
  struct rlimit limit;
  limit.rlim_cur = RLIM_INFINITY;
  limit.rlim_max = RLIM_INFINITY;
  if (0 != setrlimit(RLIMIT_AS, &limit)) {
  //errro
  } 
}