不要再代码里频繁的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
?
轉載于:https://www.cnblogs.com/GODYCA/archive/2013/01/10/2854806.html
總結
以上是生活随笔為你收集整理的不要再代码里频繁的new和delete的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#实现(递归和非递归)快速排序和简单排
- 下一篇: 有3个集合, 从其中一个集合中删除同时存