我遇到了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;
}
我分配总大小为1.5GB的对象。解除分配后程序崩溃(bad_alloc异常)我试图分配一个大小为500MB的数组。
但是这个代码不会因为较低的nDocSize值而崩溃,例如500.你能解释一下导致bad_alloc异常的原因,我该如何解决这个问题?对于从PDF加载的图像,我需要这么大的数组。
我使用Visual Studio 2015,它崩溃了x86应用程序。
答案 0 :(得分:1)
MSVC声称任何请求内存超过0x80000000的新语句都会失败。顺便说一下,分配一大块内存也是不可接受的,现在正在按矢量进行。
您可以选择deque&lt;&gt;,它通常管理一系列连续的内存块,每个块可能更小,并且扩展其容量也更便宜。您也可以自己管理记忆。