C++ 对最大内存分配设置限制?
C++ set limit on maximum memory allocation?
我正在用 x86 架构编写程序(由于技术原因我不能使用 x64)。我设计了我的程序,使其使用不到 4GB 的 RAM 内存。但是,当我为大型 std::vector
分配内存时,我注意到构造函数分配的内存比必要的多,后来 trim 内存减少到适当的数量(在较小的内存要求下进行测试,以便能够观察到).这是一个问题,因为分配的 RAM 多于所需的短暂时刻会由于 >4GB RAM 使用而导致程序崩溃。
有没有办法阻止程序动态分配超过给定数量的 RAM?如果是这样,如何在 Visual Studio 解决方案中设置此 属性?
事实证明,标准 vector
构造函数正在短暂地分配额外的内存来执行复制操作,正如 Peter Cordes 在评论中提到的那样。这就是为什么这样做:
vector<vector<struct>> myVector(M, vector<struct>(N))
可能会导致内存分配问题。
对我有用的解决方法是:
如果在编译前已知所需的向量大小,则以下不会产生内存峰值:
vector<array<struct,N>> myVector(M)
如果向量大小需要保持动态,评论中 Mansoor 的建议也不会产生内存峰值:
vector<vector<struct>> myVector(M)
for(int i=0;i<M;i++){
myVector[i].reserve(N);
myVector[i].resize(N);
}
我正在用 x86 架构编写程序(由于技术原因我不能使用 x64)。我设计了我的程序,使其使用不到 4GB 的 RAM 内存。但是,当我为大型 std::vector
分配内存时,我注意到构造函数分配的内存比必要的多,后来 trim 内存减少到适当的数量(在较小的内存要求下进行测试,以便能够观察到).这是一个问题,因为分配的 RAM 多于所需的短暂时刻会由于 >4GB RAM 使用而导致程序崩溃。
有没有办法阻止程序动态分配超过给定数量的 RAM?如果是这样,如何在 Visual Studio 解决方案中设置此 属性?
事实证明,标准 vector
构造函数正在短暂地分配额外的内存来执行复制操作,正如 Peter Cordes 在评论中提到的那样。这就是为什么这样做:
vector<vector<struct>> myVector(M, vector<struct>(N))
可能会导致内存分配问题。
对我有用的解决方法是:
如果在编译前已知所需的向量大小,则以下不会产生内存峰值:
vector<array<struct,N>> myVector(M)
如果向量大小需要保持动态,评论中 Mansoor 的建议也不会产生内存峰值:
vector<vector<struct>> myVector(M)
for(int i=0;i<M;i++){
myVector[i].reserve(N);
myVector[i].resize(N);
}