有效进行内存管理是我遇到的一个问题,
当进行大量的new 和delete 操作这后,如果访问用new新产生的内存区域内容时,效率不高。
现在很多大型软件(可供二次开发)都有自己的内存管理api,而不仅仅让程序员依赖于操作系统和编译器。
我想这样做的原因如下:
1、频繁new ,delete造成大量的内存碎片,操作系统不能有效整理(尤其是windows)。
2、在windowns系统下,为指针保留而外的界限,从而增加了开销。(别人告诉我的,我不理解)对于上述问题,请高手予以解答:
1、造成问题的原因是什么?
2、有效的解决方案是什么?

解决方案 »

  1.   

    没有想像的那么严重!
    Windows会在分配内存时适当的考虑,使用其它的管理方法,最终都是要转化为系统的内存分配历程的!
    至于第二个问题吗?是的,要保留一些内存空间,但很小的,根据不同的Windows系统这个保留的空间有2-8B而已,不会增加太多的开销的!个人观点!
      

  2.   

    自己申请一大块内存,然后在里面使用自己的new/delete。
      

  3.   

    可以试试HeapCreate/HeapDestroy/HeapAlloc/HeapReAlloc/HeapFree等局部堆管理函数,把大量相同大小的对象放到同一个堆中分配可以避免碎片化。
      

  4.   

    sans(sans), In355Hz(好象一条狗) 讲的有道理,但是,我不明白问什么会造成这种效率差的问题。
    请回答的详细一点。:)
      

  5.   

    频繁地分配和释放内存在Windows平台下好像是有问题。最近在做一个服务器程序,涉及到客户端数据的存储与转发,我是先开辟了一个大的内存区域(缓冲池),然后再对其进行操作的。
      

  6.   

    VituralAlloc,进行在分配,实际上更慢,除非直接使用,堆较快,其次new