【问题标题】:error: arma::memory::acquire(): out of memory for Armadillo错误:arma::memory::acquire():Armadillo 内存不足
【发布时间】:2016-02-01 15:01:14
【问题描述】:

当我尝试将 10516x66 矩阵乘以 66x10516(矩阵与其转置后)时,我遇到了标题中描述的错误。结果应该是一个 10516x10516 矩阵,当然我从来没有实现过。也许我的推理有缺陷,但由于我的矩阵是 Mat<double> 并且每个双精度为 8 个字节,结果应该是 10516*10516*8 = 884690048 字节 = 0.88469 GB。我的机器是具有 8 Gb RAM 的 Windows,我正在运行 32 位 minGW 编译器。知道为什么会发生这种情况以及如何克服这个问题吗?

【问题讨论】:

    标签: c++ memory matrix out-of-memory armadillo


    【解决方案1】:

    在 Windows 上的 64 位主机下运行的 32 位程序最多可使用 4Gb 内存。为此,您必须在链接期间使用特殊选项 /LARGEADDRESSAWARE。

    链接:https://msdn.microsoft.com/en-us/library/wz223b1z(VS.80).aspx

    很可能,您的进程被限制为 2Gb,并且在分配时没有足够的内存或没有足够的连续内存。迁移到 4Gb 可能会很快解决问题

    更新

    看起来等效的 mingw32 链接器选项是 --large-address-aware

    【讨论】:

    • @RDGuida mmm... 可以肯定的是,您可以使用dumpbin 检查您的.exe 吗?我相信dumpbin 可以作为特定 Windows 版本的 Windows SDK 的一部分下载。在终端运行dumpbin /headers your.exe,你会得到(或不会得到)线Application can handle large (>2GB) addresses。如果存在线路,那么您的应用程序最多可以处理 4Gb。最后一招就是移到64bit,-m64mingw switch
    • @RDGuida 实际上环顾this 看起来像一个工具,可用于为您的.exe 设置LARGEADDRESSAWARE 标志,无需重新编译和重新链接。描述pso-world.com/forums/showthread.php?t=199993
    • @RDGuida editbin 也可用于设置 LARGEADDRESSAWARE 标志。 msdn.microsoft.com/en-us/library/203797te.aspx
    猜你喜欢
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 2012-01-20
    相关资源
    最近更新 更多