【发布时间】:2016-02-12 07:21:28
【问题描述】:
我需要分配大量内存,并且 Cygwin 可以使用我所有的 RAM。我安装的内存是 12GB。我在运行以下代码时遇到问题。
#include <iostream>
#include <armadillo>
using namespace arma;
int main()
{
// arma::mat::fixed<10,10000> buffer; // ok
arma::mat::fixed<10,100000> buffer; // cygwin_exception::open_stackdumpfile
// arma::mat::fixed<10,100000000> buffer; // cygwin_exception::open_stackdumpfile
std::cout<<"Allocation was successful."<<std::endl;
return 0;
}
我收到一个运行时错误:
0 [unknown (0x1F40)] a 7656 cygwin_exception::open_stackdumpfile: 将堆栈跟踪转储到 a.exe.stackdump
这表明没有足够的内存。通过减小分配的大小,错误就会消失。
我用
regtool -i set /HKLM/Software/Cygnus\ Solutions/Cygwin/heap_chunk_in_mb 2048
g++ main.cpp -larmadillo
a.exe
但似乎regtool 无法解决某些网站建议的问题。
【问题讨论】:
-
不要使用大尺寸的固定尺寸矩阵 (
arma::mat::fixed<rows,cols>)。这只会消耗有限堆栈中的内存。相反,请使用标准矩阵 (arma::mat)。例如:mat buffer(10,100000,fill::zeros);
标签: c++ memory g++ cygwin heap-memory