Game Engine Architecture 中文翻译:2.4 内存泄漏和坏内存

译者:杨漱玉青

一直困扰C和C++程式员的两个问题是内存泄漏和坏内存.内存泄漏的情况发生在申请了内存却从未释放,这导致了内存浪费甚至严重的会导致内存溢出.坏内存的情况发生在程序试图在错误的内存地址上写入数据,覆盖掉原本在那里的重要数据,这也会导致原本该写入数据的地方没有被写入.这两个问题的原因是众所周知的指针.

指针是一个强大的工具,她可以成为一个方便好用的数据代理,当然如果正确使用的话。当然她也很容易成为魔鬼的代理。如果一个指针指向一个已经被释放掉的内存空间,或者指向一片分配的时候非零的空间的时候,她就会变成一个会导致坏内存的危险工具。同样的,一片被申请的内存实在太容易忘记将她释放了,于是她会导致内存泄漏。

要明白良好的编程习惯是避免这类问题的解决方法,写出坚固的代码是不会导致此类问题的。但是,如果有一个工具能够帮助你直接检测内存泄漏和坏内存,那么这类问题解决起来就容易多了。感谢上帝,有太多这类工具可以选择了。

我最爱的是IBM的Rational Purify的Purify Plus套件。Purify会对每一个指针进行钩子监控,会监控所有的内存申请和内存释放情况。当你通过Purify运行你的程式的时候,你可以得到一份实时的内存报告,这份报告真实而精确。当内存问题存在的时候,你可以得到内存泄漏的细节报告。每个问题报告都可以直接链接到根源代码,这会让你解决这些问题变得容易很多。

另外一个流行的工具叫做Bounds Checker,是CompuWare做的。这和Purify有类似的用法和功能。

译者注:我个人使用的是Visual Leak Detector,这是一款开源免费的Visual Studio插件,可以指定到内存泄漏的代码,很是好用。

    • 大D
    • October 12th, 2011 9:48pm

    顶玉玉~
    果断沙发

      • 漱玉青 楊
      • October 12th, 2011 9:51pm

      嘿嘿,谢谢啦~~

  1. No trackbacks yet.

return top