美文网首页
频繁new/delete的内存管理问题

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

作者: b6aed1af4328 | 来源:发表于2016-12-12 16:46 被阅读178次

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

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


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

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

  • 找一个最大的.

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

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


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

相关文章

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

    http://bbs.csdn.net/topics/390564883 简而言之:频繁new/delete会产生...

  • 两天实习笔记

    1 任务一:实现固定内存池 1.1 默认内存管理函数的不足 利用默认的内存管理函数new/delete或mallo...

  • new失败抛出异常吗?

    new/delete 在C++中动态分配与释放内存是通过new/delete和new []/delete []实现...

  • C++内存

    认识C++内存 operator new, operator delete和new, delete operato...

  • 内存管理

    总结使用new申请内存,使用delete释放内存申请内存需要判断是否成功,释放内存需要设空指针new和delete...

  • 内存分配问题

    碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对...

  • C++<第二十二篇>:new和delete运算符

    new 和 delete 是C++在C之后新增的两个运算符,new用来分类内存,delete用来释放内存。 (1)...

  • 内存管理

    内存管理 C++使用new和delete两个运算符进行内存管理。 使用new进行动态分配和初始化对象 在自由空间内...

  • ARC下的内存释放

    free() delete 与 delete[] 释放内存delete 释放new分配的单个对象指针指向的内...

  • c++ new 和delete的种种

    new/delete动态管理对象,new[]/delete[]动态管理对象数组。 C++中,把int 、char....

网友评论

      本文标题:频繁new/delete的内存管理问题

      本文链接:https://www.haomeiwen.com/subject/gcgmmttx.html