2010-01-31 311 views
0

我在一个游戏项目上工作。最近,我们遇到了一个问题,当我们加载/卸载不同场景大约三次时,我们遇到了“bad_alloc”异常。bad_alloc详细介绍?

每当我们加载一个场景时,我们首先将压缩的.zip文件夹加载到内存中,然后从中提取游戏对象。因为我们没有任何内存分析器工具,我简单地使用Process Explorer中的性能图表,看看到底是怎么回事:

  1. 运行游戏==>〜620 MB
  2. 装入1号现场= =>〜1.1 GB
  3. 卸载它==>〜620 MB
  4. 装入第二场景==>〜1.1 GB
  5. 卸载它==>〜620 MB
  6. 装入第三场景==> bad_alloc

我追溯到每个负载的新操作员。压缩文件夹的加载本身需要100〜120 MB的内存,而bad_alloc在第三次加载时会抛出。

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

我在想,这个bad_alloc有什么可能的含义?内存不足?或者根本无法分配所需大小的连续块?如果它有几种可能性,我怎么能确定它?

任何帮助是apprecciated,谢谢!

回答

7

如果你是在同一时间(只有一个new)分配所有内存,大概堆太零碎找到足够的连续内存来分配你的要求是什么。

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

2

bad_allocnew当分配无法实现时抛出。可能你只是用完了内存。通常情况下,自定义内存管理器在请求无法完成时也会抛出bad_alloc,但是您表示不使用任何内存管理器。在调试器中运行代码以查看异常源自的位置。

顺便说一下,这是很多的内存。大多数专业游戏需要你做的事情的四分之一到四分之一;研究减少内存使用的方法。另外要注意的是内存泄漏;如果你永远不会释放记忆,那么你最终会用完。

+1

这不是很多。我无法想象过去5年中可以获得四分之一的专业比赛。围绕1gig标记盘旋是很常见的。 – jalf 2010-01-31 15:21:50

+0

@jalf:我玩过的大部分都没有超过Gig。也许我只是玩错了游戏。 :P – GManNickG 2010-01-31 15:57:09