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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

c语言获取系统剩余内存_C语言编程中的“堆”和“栈”七大不同之处

發布時間:2023/12/13 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言获取系统剩余内存_C语言编程中的“堆”和“栈”七大不同之处 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
更多精彩,請點擊上方藍字關注我們!

對于編程初學者來說會接觸到一些難以理解的名稱,比如堆(heap)、棧(stack)、堆棧(stack)等。初學開發過程中往往讓人混淆不清。今天我們來談談堆和棧的具體區別,來幫助初學者理清思路。

堆和棧的區別一直都是永恒的話題,為此筆者也查了很多的資料,以防自己的理解錯誤,而給他人造成理解偏差。

“堆”和“?!?/strong>

先從簡單的一個例子引出堆和棧:

void function()

{

int *p = (int *)malloc(10*sizeof(int));

}

這是C語言開發學習過程中,必不可免要學習的知識,動態分配一塊空間,空間在堆區大小是40字節(32位系統中)。而定義的指針變量p是局部變量,在棧區中 占用4字節空間,用來存放剛剛前面動態分配的空間的首地址。

可以看出,在這一句代碼中同時包含了棧和堆,如下圖所示。

堆和棧

堆和棧的區別

我們從以下幾個方面比較一下堆和棧:

01

存儲內容不同

棧:在函數調用時,棧中存放的是函數中各個參數(局部變量)。棧底下是函數調用后的下一條指令。

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

02

管理方式上不同

棧:由系統自動分配空間,同時系統自動釋放空間。例如,聲明在函數中一個局部變量“int b“。系統自動在棧中為b開辟空間,當對應的生存周期結束后棧空間自動釋放。

堆:需要程序員手動申請并且手動釋放,并指明大小。在C語言中malloc函數申請,釋放free函數,在C++中new和delete實現。

03

空間大小不同

棧:獲取空間較小。在Windows下,一般大小是1M或2M,當剩余??臻g不足時,分配失敗overflow。

堆:獲得空間根據系統的有效虛擬內存有關,比較靈活,比較大。

04

能否產生碎片不同

棧:不會產生碎片,空間連續。

堆:采用的是鏈表的存儲方式,會產生碎片。

05

生長方向不同

棧:向低地址擴展的數據結構,是一塊連續的內存的區域。

堆:向高地址擴展的數據結構,是不連續的內存區域。這是由于系統是用鏈表來存儲的空閑內存地址的,自然是不連續的,而鏈表的遍歷方向是由低地址向高地址。

06

分配方式不同

棧:有2種分配方式——靜態分配和動態分配。靜態由編譯器完成,例如局部變量;動態由alloca函數實現,并且編譯器會進行釋放。

堆:都是動態分配的,沒有靜態分配的堆。

07

分配效率不同

棧:由系統自動分配,速度較快。但程序員是無法控制的。

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

以上是棧和堆幾個方面的不同,希望通過上面的資料可以幫助初學者分清堆和棧。

END

碧茂課堂精彩課程推薦:

1.Cloudera數據分析課;

2.Spark和Hadoop開發員培訓;

3.大數據機器學習之推薦系統;

4.Python數據分析與機器學習實戰;

詳情請關注我們公眾號:碧茂大數據-課程產品-碧茂課堂

現在注冊互動得海量學幣,大量精品課程免費送!

關注最新行業動態,

加群進行技術交流!

總結

以上是生活随笔為你收集整理的c语言获取系统剩余内存_C语言编程中的“堆”和“栈”七大不同之处的全部內容,希望文章能夠幫你解決所遇到的問題。

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