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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++中在堆和栈中申请空间的差别

發布時間:2023/12/2 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++中在堆和栈中申请空间的差别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

堆中和棧中申請的空間的比較, 我找到了下面的比較:

棧的情況:
棧上分配空間的好處是快,而且對象生存期是自動的,離開當前域之后就自動析構回收。
壞處就是棧空間有限,而且不能人為控制對象的生存期,
比如你無法將一個函數內部的棧上的對象返回,因為這個函數執行完畢后棧空間會自動回收。

堆的情況
堆上分配空間就相反,new一個空間出來是較慢的,而且對堆上對象的訪問也稍慢于棧上。
一旦new一個空間出來,需要自己手動去delete回收,系統不會幫你管理回收(用GC的除外),
但是分配空間大小靈活,而且正因為是手動回收的,你可以自由控制對象生存期,常用來跨域傳遞對象。

管理方式不同:棧是由編譯器自動管理的。堆的釋放工作是由程序員來控制的(delete),容易忽略。
空間大小不同:棧,一般都是有一定的空間大小。堆內存幾乎是不受限制的。
碎片的產生:堆,頻繁的new/delete勢必會造成內存空間的不連續,造成大量的碎片空間,程序效率降低。棧,不會存在這個問題,棧是先進后出的隊列,所以永遠不可能在內存塊中間出現碎片。
分配方式不同:堆是動態分配的,沒有靜態分配的堆。棧有兩種分配方式:靜態和動態,靜態分配時編譯器自己完成的(局部變量)動態分配是由alloca函數進行分配。
分配效率不同:棧是機器系統提供的數據結構,計算機會在底層對棧提供支持。堆是C++函數庫提供的,機制比較復雜,所以棧的分配效率比堆的效率高。

堆中的空間是動態申請的 運行時才分配的,棧中的空間是在編譯時,鏈接器進行鏈接的時候就會確定其地址的,我們申請的局部變量就是棧空間。堆與棧相比劣勢什么的我覺得談不上,作用不同,不好評價。就比如靜態數組和動態數組,當他們用來存儲輸入的時候,由于無法確定輸入數量,無疑動態在這里更適合。
從效率上來說,村沖在棧中效率是更好的,因為在編譯時就會確定其地址。但是在堆中申請空間則不同,要動態的分配地址,有時還會要與物理地址建立映射,開銷是比棧更大的。

轉載于:https://www.cnblogs.com/hahawgp/archive/2013/04/08/3008737.html

總結

以上是生活随笔為你收集整理的c++中在堆和栈中申请空间的差别的全部內容,希望文章能夠幫你解決所遇到的問題。

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