如何更改程序的最大RAM数量?我一直在耗尽内存(不是系统max,ulimit max),我不想改变全局内存限制。我环顾四周,看到vlimit()函数可能有效,但我不确定如何使用它。
编辑:我在linux 2.6.38-11-generic上 这不是内存泄漏,我实际上必须分配给定类的100k,没有办法解决它。
答案 0 :(得分:3)
您是否在堆栈上分配对象并且实际上达到了堆栈限制?
你是否,例如,写下这样的东西:
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
}
如果由于某种原因,您确实需要更大的堆栈,请查阅编译器文档以获取相应的标志:
How to increase the gcc executable stack size?
Can you set the size of the call stack in c++? (vs2008)
您可能需要考虑:
答案 1 :(得分:2)
如果系统管理员对您施加了这些限制,那么不会 - 您被卡住了。如果你是ulimit
自己,请确保 - 只需提高软限制和硬限制。
正如Chris在评论中指出的那样,如果您是一个特权流程,您可以使用setrlimit
来提高您的硬限制。但是,如果您处于ulimit
之下,则可以假定您不太可能成为特权流程。
答案 2 :(得分:2)
您是否理解为什么要达到RAM限制?您确定没有内存泄漏(如果您确实有泄漏,则需要在运行应用程序较长时间时,RAM越来越多。)
假设有一台Linux机器,你可以使用valgrind来搜寻和调试内存泄漏,你也可以使用Boehm's conservative garbage collector来避免它们。
答案 3 :(得分:1)
如果您有权限,可以使用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
}
}