gpt4 book ai didi

c++ - 大数组的 ba​​d_alloc

转载 作者:行者123 更新时间:2023-11-30 05:13:54 27 4
gpt4 key购买 nike

我在 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 的对象。在释放后我试图分配一个大小为 500MB 的数组时程序崩溃(bad_alloc 异常)。

但此代码不会因 nDocSize 的较低值而崩溃,例如 500。您能否解释一下导致 bad_alloc 异常的原因以及如何解决此问题?对于从 PDF 加载的图像,我需要如此大的数组。

我使用 Visual Studio 2015,它在 x86 应用程序中崩溃。

最佳答案

MSVC 声称任何请求内存超过 0x80000000 的新语句都会失败。顺便说一句,分配一整 block 大内存也有点 Not Acceptable ,现在是按 vector 进行的。

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

关于c++ - 大数组的 ba​​d_alloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43683406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com