日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

堆和栈概念整理

發布時間:2023/12/4 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 堆和栈概念整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.內存管理方式:

???? 堆:一般由程序員分配釋放,程序員申請時需要指明大小,leg,C語言中malloc函數:p1=(char*)malloc(10),C++中:p2=new char[20].若程序員不去釋放,當程序結束時可能由操作系統釋放 ,注意其與數據結構的堆完全是兩回事,分配方式類似于鏈表,分配釋放的關鍵字:new,malloc,delete,free

???? 棧:由系統自動分配和釋放,存放函數的參數值,局部變量等等,操作類似于數據結構的棧,eg:生命一個局部變量 int b,系統自動在棧中為其開拓空間

?

2.系統響應:

???? 堆:OS有一個記錄空閑內存地址的鏈表,當OS收到程序的申請時,會遍歷該鏈表,尋找第一個空間大于所申請空間的堆結點,然后將該結點從空閑結點鏈表中刪除,并將該結點的空間分配給程序,另外,對于大多數系統,會在這塊內存空間中的首地址處記錄本次分配的大小,這樣代碼中的delete語句才能正確的釋放本內存空間。另外由于找到的堆結點的大小不一定正好等于申請的大小,系統會自動的將多余的那部分重新放入空閑鏈表中。

??? 棧:只要棧的剩余空間大于申請空間,系統將為程序提供內存,否則將報異常,提示棧溢出

3.分配效率

??? 堆:是由new分配的內存,一般熟讀比較慢,而且容易產生內存碎片,不過用起來比較方便。

??? 棧:由系統內存自動分配,程序員無法控制,速度較快。

4.存放內容:

??? 堆:一般是在堆的頭部用一個字節存放堆的大小。堆中的具體內容有程序員安排

????棧:存放函數參數(由右往左入棧),函數中的局部變量。(多數C編譯器下)

5.生長方向:

??? 堆:是由低地址向高地址擴展的數據結構

??? 棧:由高地址向低地址擴展的數據結構。

?6.碎片問題:

?? 堆:頻繁的new/delete勢必會造成內存空間的不連續,從而造成大量的碎片,使程序效率降低。

?? 棧:則不會存在這個問 題, 因為棧是先進后出的隊列,且存儲空間保持林旭。

?7.空間大小:

?? 堆:一般來講在32位系統下,內存可以達到4G的空間,從這個角度來看堆內存幾乎是沒有什么限制的。

? ?棧:一般都是有一定的空間大小的。

詳見:http://baike.baidu.com/view/93201.htm

總結

以上是生活随笔為你收集整理的堆和栈概念整理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。