如何更改程序的最大 RAM 量?我经常耗尽内存(不是系统最大值,ulimit max),我不想更改全局内存限制。我环顾四周,发现 vlimit() 函数可能有效,但我不确定如何使用它。
编辑:我在 linux 2.6.38-11-generic 这不是内存泄漏,我实际上必须分配给定类的 100k,没有办法解决。
如何更改程序的最大 RAM 量?我经常耗尽内存(不是系统最大值,ulimit max),我不想更改全局内存限制。我环顾四周,发现 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
}
如果出于某种原因,您真的想要更大的堆栈,请查阅您的编译器文档以获取适当的标志:
您可能需要考虑:
Do you understand why you are hitting the RAM limit? Are you sure that you don't have memory leaks (if you do have leaks, you'll need more and more RAM when running your application for a longer time).
Assuming a Linux machine, you might use valgrind to hunt and debug memory leaks, and you could also use Boehm's conservative garbage collector to often avoid them.
如果系统管理员对您施加了这些限制,那么不,您被卡住了。如果你是ulimit
自己,当然——只要提高软硬限制。
正如克里斯在评论中指出的那样,如果您是特权进程,则可以使用setrlimit
来提高进程中的硬限制。但是,有人假设如果您处于 a 之下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
}
}