需要一个代码来动态分配 >1GB 内存阵列在 Visual Studio C++
need a code to dynamically allocate >1gb memory array in Visual Studio C++
可能重复:
如何在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。
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- free -m 没有显示正确的数据,我使用了 1GB 的持久内存,但它只显示使用了 100kb
- 需要一个代码来动态分配 >1GB 内存阵列在 Visual Studio C++
- 如何克服读取大文件(超过1GB)时的内存错误——C/ c++
- 在C++中,将大型二进制(1GB-4GB)文件加载到内存中的最快方法是什么
- 大于1GB内存分配错误