作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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++ - 大数组的 bad_alloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43683406/
我是一名优秀的程序员,十分优秀!