C++更改最大RAM限制
C++ Change Max RAM Limit
如何更改程序的最大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
}
}
相关文章:
- 用C++20 fmt限制结果的总大小
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 对于C++中使用智能指针的指针算术限制,有没有一种变通方法
- 当用户超过按钮点击限制时报告
- 如何在c++中限制尝试次数
- 将QGraphicsItem的移动区域限制在多边形区域内
- 将 cin 限制为只有一个
- 随机数未达到限制
- 重载算子新功能的限制
- 是否可以在编译时限制类的实例数?
- std::array的长度有大小限制吗?
- 内存限制超出 bad_alloc
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- 将使用/类型定义限制为类范围
- C++中的输入限制和错误检查
- 如何限制在C++中为单个类创建的对象数量?
- 在定义字符数组(井字游戏)的 for 循环中应用输入限制
- 限制用户可以在 QFileDialog 中选择的文件数量
- C++更改最大RAM限制
- ram +交换内存最大限制的异常处理