bad_alloc详细?

时间:2010-01-31 08:32:25

标签: c++ memory

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

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

  1. 运行游戏==> ~620 MB
  2. 加载第一个场景==> ~1.1 GB
  3. 卸载它==> ~620 MB
  4. 加载第二个场景==> ~1.1 GB
  5. 卸载它==> ~620 MB
  6. 加载第3个场景==> bad_alloc的
  7. 我追溯到每个负载的新运算符。加载压缩文件夹本身需要100~120 MB内存,而bad_alloc在第3次加载时会从中丢弃。

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

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

    任何帮助都是适用的,谢谢!

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:2)

当无法完成分配时,bad_alloc会抛出

new。可能,你只是内存不足。通常,自定义内存管理器在请求无法完成时也会抛出bad_alloc,但您说您没有使用任何内容管理器。在调试器中运行代码以查看异常的来源。

顺便说一句,那是很多的记忆。大多数职业比赛需要你所做的一半到四分之一;研究减少内存使用的方法。另外需要注意的是内存泄漏;如果你永远不会释放记忆,你最终会用完。