频繁new/delete的内存管理问题

http://bbs.csdn.net/topics/390564883

简而言之:频繁new/delete会产生大量的内存碎片,需自行使用内存池编写程序消除内存碎片,优化内存分配。


这个应该一定会吧,你想想,如果你自己来写操作系统,也不外两个办法来分配新申请的内存:

  • 在所有可以容纳这个申请量的的内存段中找一个最小的.

  • 找一个最大的.

  • 两种各有好处,也各有坏处.(随机找当然也算一种方法,但一般好像都用上述两种)但不论哪一种,都不能保证你连续两次 new/delete 拿到的是同一个位置,这时一定会有碎片.如果你这个问题要求很严格,就需要自己管理内存,或是使用一些实例变量来实现.操作系统有内存碎片管理的方法,但一定不如你自己管理好.(因为你是专用的,操作系统必须是通用的)

  • 一般如果是需要大量new/delete之类的,可以自己做内存池(也许有别的叫法,但很久以前我学的时候,书里就是这样叫的).自己申请一个足够大的内存,自己分配,通过一定的机制对自己的内存池进行碎片整理(比如碎片足够多,无法在这个内存池中分配出足够内存的时候).
    或内存池使用比例足够大的时候(比如90%使用率/90%是为了方便说明随手写的,不要作为参照/),加大你的内存池.。


  • 对于长期运行的程序来说, 尽量会内存池吧, 动态申请内存肯定会存在内存碎片的, 最终导致系统有内存却分配不到的情况

你可能感兴趣的:(频繁new/delete的内存管理问题)