【问题标题】:Heap size in C++ CygwinC++ Cygwin 中的堆大小
【发布时间】: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&lt;rows,cols&gt;)。这只会消耗有限堆栈中的内存。相反,请使用标准矩阵 (arma::mat)。例如:mat buffer(10,100000,fill::zeros);

标签: c++ memory g++ cygwin heap-memory


【解决方案1】:

arma::mat::fixed 实际上是在堆栈上分配内存,其大小非常有限。您应该使用 arma::mat 构造函数,但我不确定,因为我从未使用过 arma。

【讨论】:

  • 请问您使用哪个工具检测它使用堆栈而不是堆?
  • 我看过这里:arma.sourceforge.net/docs.html#Mat 它说它在编译时分配内存,这似乎是堆栈分配。
猜你喜欢
  • 2014-05-12
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 2010-12-22
  • 1970-01-01
相关资源
最近更新 更多