c++ - bad_alloc 的详细信息?

标签 c++ memory

我从事一个游戏项目。最近,我们遇到了一个问题,当我们加载/卸载不同的场景大约 3 次时,我们捕获了“bad_alloc”异常。

每次加载场景时,我们首先将压缩的 .zip 文件夹加载到内存中,然后从中提取游戏对象。由于我们没有任何内存分析器工具,我只是使用 Process Explorer 的性能图来查看发生了什么:

  1. 运行游戏 ==> ~620 MB
  2. 加载第一个场景 ==> ~1.1 GB
  3. 卸载 ==> ~620 MB
  4. 加载第二个场景 ==> ~1.1 GB
  5. 卸载 ==> ~620 MB
  6. 加载第三个场景 ==> bad_alloc

我追踪到每个负载的新运算符(operator)。加载压缩文件夹本身需要 100~120 MB 内存,并且在第 3 次加载时从中抛出 bad_alloc。

我们的平台安装了 2GB 物理内存。似乎我们在卸载场景后没有留下任何东西。每个压缩文件夹的大小大致相同。但是,第三次加载的新运算符不起作用。

我想知道,这个 bad_alloc 可能是什么意思?内存不足?或者根本无法分配所需大小的连续 block ?如果确实有多种可能性,我该如何确定呢?

感谢任何帮助,谢谢!

最佳答案

如果您一次分配所有内存(只有一个 new),可能是堆过于碎片化,无法找到足够的连续内存来分配您请求的内容。

这可以通过按部分分配新场景来解决。

关于c++ - bad_alloc 的详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2171047/

相关文章:

memory - 黑色比白色占用更多内存吗?

c++ - 错误 : Pointer to incomplete class type is not allowed. 我该怎么做?

c++ - 如何修复 Mujoco CmakeLists 构建错误 "/usr/bin/ld: cannot find -lglfw"?

c++ - 使用堆栈指针删除派生类?

c++ - Delphi CopyMemory vs C++ memcpy

ios - MKMapView 释放内存

c++模板特征——编译时不包含头文件

c++ - 如何将 .rc 和 .cpp 文件组合成 .exe?

python - 为什么pybind11将double转换为int?

iphone - iPhone 内存泄漏问题