需要一个代码来动态分配 >1GB 内存阵列在 Visual Studio C++

need a code to dynamically allocate >1gb memory array in Visual Studio C++

本文关键字:内存 1GB gt 阵列 C++ Studio Visual 动态分配 代码 一个      更新时间:2023-10-16

可能重复:
如何在Visual Studio C++中增加内存限制

当我在没有CUDA/OpenCV的情况下使用时,我无法初始化此代码。

  #include<iostream>
    using namespace std;
    int main()
    {
    double *arr,*arr2,*arr3;
    arr=new double[100000000];
    arr2=new double[100000000];
    arr3=new double[100000000];
    //std::bad_alloc at memory location 0x001ff700 error is what I get when I try to allocate 2.4gb out of 3.3gb available.
    return 0;
    }

我并不是在抱怨Linux与Windows的兼容性,我只是想让这些代码在Windows服务器上运行,所以我对任何不存在这种限制的Windows C++编译器都持开放态度。感谢

这是针对x86的吗?你试过打开LARGEADRESSAWARE吗?有时,这帮助我获得了更多的工作分配。

在CPU上分配这样大小的内存应该没有问题。如果malloc不能为几个100MB工作,那就大错特错了。你的程序的内存使用率是多少?它可能是严重碎片化的,或者你泄露了内存?

为什么从堆中分配时会出现堆栈溢出?你在用alloca吗?

您可以尝试VirtualAlloc系列函数,直接分配整个页面。

编辑:看了你之前的问题后,我发现你在主函数的堆栈上声明了一个巨大的多维数组(双a[..][..][..])。这很可能是堆栈溢出的罪魁祸首。不要在堆栈上分配这么多内存。而是在堆上分配它(使用malloc/new)。

您发布的限制和错误消息(0x001ff700)中的32位内存地址表明您已经编译了32位版本的应用程序,这是Visual Studio中的默认版本。请将Visual Studio配置为以x64为目标。有关详细信息,请参阅MSDN。