大型阵列的错误分配 我在C++中内存分配问题。请看下面的代码: int main() { std::vector<BYTE *> v; srand(GetTickCount()); // Load a document and free it. int nDocSize = 1500; while (nSize <= 1024 * 1024 * nDocSize) { int n = rand() % (1024 * 1024) + 1; v.push_back(new BYTE[n]); nSize += n; } for (auto itArr = v.begin(); itArr != v.end(); ++itArr) { delete[] * itArr; } // Load an image. BYTE *data = new BYTE[1024 * 1024 * 500]; delete[] data; return 0; } intmain() { std::向量v; srand(GetTickCount()); //加载文档并释放它。 int nDocSize=1500; 而(nSize

大型阵列的错误分配 我在C++中内存分配问题。请看下面的代码: int main() { std::vector<BYTE *> v; srand(GetTickCount()); // Load a document and free it. int nDocSize = 1500; while (nSize <= 1024 * 1024 * nDocSize) { int n = rand() % (1024 * 1024) + 1; v.push_back(new BYTE[n]); nSize += n; } for (auto itArr = v.begin(); itArr != v.end(); ++itArr) { delete[] * itArr; } // Load an image. BYTE *data = new BYTE[1024 * 1024 * 500]; delete[] data; return 0; } intmain() { std::向量v; srand(GetTickCount()); //加载文档并释放它。 int nDocSize=1500; 而(nSize,c++,arrays,out-of-memory,C++,Arrays,Out Of Memory,MSVC声称,任何请求内存超过0x8000000的新语句都会失败。顺便说一句,分配一整块内存在某种程度上也是不可接受的,现在正在按vector进行 您可以选择deque,它通常管理一系列连续的内存块,每个块可能更小,扩展其容量也更便宜。您也可以自己管理内存。注意x86有大约2GB的地址空间。如果您有任何碎片,您将无法连续分配1.5 GB。您有多少RAM与您的问题无关的机器建议:考虑使用 STD::vector < /代码>,这样您就不必手工编写代码>删除[]/COD>任何东西;您可以只做 v清除

MSVC声称,任何请求内存超过0x8000000的新语句都会失败。顺便说一句,分配一整块内存在某种程度上也是不可接受的,现在正在按vector进行


您可以选择deque,它通常管理一系列连续的内存块,每个块可能更小,扩展其容量也更便宜。您也可以自己管理内存。

注意x86有大约2GB的地址空间。如果您有任何碎片,您将无法连续分配1.5 GB。您有多少RAM与您的问题无关的机器建议:考虑使用<代码> STD::vector < /代码>,这样您就不必手工编写代码>删除[]/COD>任何东西;您可以只做<代码> v清除(;)> <代码>自动释放所有的<代码>字节[]allocations。但我尝试分配500MB,而不是2GB。500GB的分配是可行的,但当程序以前执行了大量分配和释放时,它会崩溃。当我尝试分配这个大数组时,即使进程消耗10MB内存,应用程序也会崩溃。