不要再代码里频繁的new和delete
为什么不要再代码里频繁的new和delete了呢,因为new是在堆中搜索一块可用的内存给程序使用,在堆中分配的内存不是连续的,不像栈,后进先出,你不可能在栈的中间pop出一块内存,所以想要使用栈中某一块内存,你必须先释放这块内存中上面的内存,也就是出栈,但是堆不一样,堆的分配的内存不连续,所以当你在程序中new了很多次,而你的程序还没有及时delete这些内存,那么就会造成最后有内存,你却new不出,因为不够大,无法满足的你需要的大小,这个就是内存碎片的问题,那么如何解决内存碎片呢?以后再探讨,可能自己需要写一个内存分配算法,还有内存池的方法,等等。。。。我觉得最好改变动态分配内存不连续的问题,就像栈一样后进先出,每次分配能连续的取的话,那就可以解决这个问题
如下情景:
0、假设有1G内存,关闭虚拟交换空间
1、声明2M个指针
2、为每个指针申请512字节内存
3、你肯定做不到为每个指针都分配到内存,遇到失败就开始按下面的方法释放内存吧
4、释放所有第偶数个指针指向的内存
5、现在,内存空闲了500M
6、但是,你几乎不可能申请到100M内存;运气够差的话,可能连1K内存都分配不到。就是因为内存碎片的存在。
那么解决内存碎片的问题得仔细研究内存分配算法?
1:最先适用法
2:最佳适用法
3:伙伴算法
。。。。。。。。
明天继续看看,想了解后续请继续关注此博客
http://blog.chinaunix.net/uid-24622489-id-2115003.html