zhoubl668的專欄:遠帆,夢之帆!
堆和棧的區別在哪裡?哪些變數會在棧中分配空間,哪些變數會在堆中分配空間?
---------------------------------------------------------------
1、申請方式
stack:
由系統自動分配。例如,宣告在函式中一個區域性變數 int b; 系統自動在棧中為b開闢空間
heap:
需要程式設計師自己申請,並指明大小,在c中malloc函式如p1 = (char *)malloc(10); //free
如p2 = (char *)malloc(10);
但是注意p1、p2本身是在棧中的。
2、申請後系統的響應棧:只要棧的剩餘空間大於所申請空間,系統將為程式提供記憶體,否則將報異常提示棧溢位。堆:首先應該知道作業系統有一個記錄空閒記憶體地址的連結串列,當系統收到程式的申請時,會遍歷該連結串列,尋找第一個空間大於所申請空間的堆結點,然後將該結點從空閒結點連結串列中刪除,並將該結點的空間分配給程式,另外,對於大多數系統,會在這塊記憶體空間中的首地址處記錄本次分配的大小,這樣,程式碼中的
3、申請大小的限制棧:在Windows下,棧是向低地址擴充套件的資料結構,是一塊連續的記憶體的區域。這句話的意思是棧頂的地址和棧的最大容量是系統預先規定好的,在WINDOWS下,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數),如果申請的空間超過棧的剩餘空間時,將提示overflow。因此,能從棧獲得的空間較小。堆:堆是向高地址擴充套件的資料結構,是不連續的記憶體區域。這是由於系統是用連結串列來儲存的空閒記憶體地址的,自然是不連續的,而連結串列的遍歷方向是由低地址向高地址。堆的大小受限於計算機系統中有效的虛擬記憶體。由此可見,堆獲得的空間比較靈活,也比較大
4、申請效率的比較:棧由系統自動分配,速度較快。但程式設計師是無法控制的。堆是由new分配的記憶體,一般速度比較慢,而且容易產生記憶體碎片,不過用起來最方便.
另外,在WINDOWS下,最好的方式是用VirtualAlloc分配記憶體,他不是在堆,也不是在棧是直接在程序的地址空間中保留一快記憶體,雖然用起來最不方便。但是速度快,也最靈活。
5、堆和棧中的儲存內容棧:在函式呼叫時,第一個進棧的是主函式中後的下一條指令(函式呼叫語句的下一條可執行語句)的地址,然後是函式的各個引數,在大多數的C編譯器中,引數是由右往左入棧的,然後是函式中的區域性變數。注意靜態變數是不入棧的。當本次函式呼叫結束後,區域性變數先出棧,然後是引數,最後棧頂指標指向最開始存的地址,也就是主函式中的下一條指令,程式由該點繼續執行。堆:一般是在堆的頭部用一個位元組存放堆的大小。堆中的具體內容有程式設計師安排。
6、存取效率的比較
char s1[] = "aaaaaaaaaaaaaaa";
char *s2 = "bbbbbbbbbbbbbbbbb";
aaaaaaaaaaa是在執行時刻賦值的;而bbbbbbbbbbb是在編譯時就確定的;但是,在以後的存取中,在棧上的陣列比指標所指向的字串(例如堆)快。比如:堆和棧的區別可以用如下的比喻來看出:使用棧就象我們去飯館裡吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。 #include
void main()
{
char a =1;
char c[] ="1234567890";
char*p ="1234567890";
a = c[1];
a = p[1];
return;
}
相關推薦
zhoubl668的專欄:遠帆,夢之帆!
堆和棧的區別在哪裡?哪些變數會在棧中分配空間,哪些變數會在堆中分配空間? --------------------------------------------------------------- 1、申請方式 sta
一個六年程式設計師的歲月沉浮,成長之路!
開篇: 本人從事Java開發有六年了,因為我比較貪玩,上進心不那麼強。總是逼不得已為了高薪跳槽才去學習, 所以也沒混成什麼大牛, 但好在現在也已經成家立業, 小日子過的還算滋潤, 起碼頂得住一月近萬元的吃喝拉撒玩各種貸款信用卡 不為金錢過於發愁了。 我特別感謝當初CSDN上遇見的那位大神,
教程|百行Python程式碼訓練情感分類器,機器之心!
情感分析是一種流行的文字分析技術,用來對文字中的主觀資訊進行自動識別和分類。它被廣泛用於量化觀點、情感等通常以非結構化方式記錄的資訊,而這些資訊也因此很難用其他方式量化。情感分析技術可被用於多種文字資源,例如調查報告、評論、社交媒體上的帖子等。 &n
【謂之小一】至大之內,謂之大一!至小之內,謂之小一!
專欄達人 授予成功建立個人部落格專欄
Python進階:全面解讀高階特性之切片!
導讀:切片系列文章連續寫了三篇,本文是對它們做的彙總。為什麼要把序列文章合併呢?在此說明一下,本文絕不是簡單地將它們做了合併,主要是修正了一些嚴重的錯誤(如自定義序列切片的部分),還對行文結構與章節銜接做了大量改動,如此一來,本文結構的完整性與內容的質量都得到了很好的保證。 眾所周知,我們可以通過索引值(或
TypeScript 2019 路線圖:更效率,更易用!
TypeScript 開發團隊剛剛釋出了 TypeScript 2019 上半年的發展路線圖。2019年1月至6月,開發團隊將重點關注以下目標: 覆蓋更多 JS 開發者 提高生產力 改善使用者體驗 提高社群參與度 完善基礎設施 不過,開發團隊也強調
A784586的專欄:任何事都存在 Plan B !
python爬取mm131圖片 python3 #!/usr/bin/python #encoding: utf-8 """ http://www.mm131.com """ import urllib.request import re import os import
ggplot2:初次見面,請多多關照!
序 作為一枚統計專業的學僧,首先需要掌握的程式語言一定是R。雖然自己對R談不上精通,但卻有著不一樣的熱愛,尤其熱衷於使用R語言繪製各種各樣覺得十分酷炫的圖。每每磕完一個繪圖作品,彷彿過了一個愉快的寒暑假,充實而滿足。而在R語言中,談到繪圖,就不得不聊聊ggpl
綠之韻胡國安築夢2019:揚帆起航,共築成長
綠之韻築夢2019:揚帆起航,共築成長 近日,2018綠之韻事業說明會於長沙盛大召開。綠之韻集團副董事長高宇先生,聯袂綠之韻集團陝西分公司高管,攜手現場7000餘名綠之韻人基於“出發 就現在”這一主題,共襄盛會,共話未來。 驚豔亮相 綠之韻產品解析 優質的產品,就是企業最好
4.非關系型數據庫(Nosql)之mongodb:普通索引,唯一索引
log 索引 xpl sys watermark lang mon style gravity 一:普通索引 1創建一個新的數據庫 > use toto; switched to db toto
Java學習之路:不走彎路,就是捷徑
下載地址 下載 何事 系統 也有 包括 軟件公司 項目管理師 應用 1.如何學習程序設計? Java是一種平臺,也是一種程序設計語言,如何學好程序設計不僅僅適用於Java,對C++等其他程序設計語言也一樣管用。有編程高手認為,JAVA也好C也好沒什麽分別,拿來就用。為什麽他
Python基礎知識之:hello world,註釋,變量,數據類型
我們 重要 一個 yield code oba () turn 編程語言 從接觸編程語言以來,在我腦海裏經常有三個問號: 這是什麽? 這個有什麽用? 這個怎麽用? 我覺得初學一個東西,把這三個問號都搞明白,那麽剩下的就是孰能生巧的過程了,在接下來的博客中,每個知
編寫一個程序,求出200到300之間的數,且滿足條件:它們三個數字之積為42,三個數字之和為12
clas system print gpo 變量 輸出 滿足 定義 post //定義變量ge、shi、bai,用於存放個位、十位、百位上的數字 int number=0; //使用for循環 for(nu
《逐夢旅程:Windows遊戲編程之從零開始》學習筆記之二:GDI框架
register 開發 操作 程序 turn use 繪制 cal 完整 1 //===========================================【程序說明】=================================== 2 //
Dream team: Stacking for combining classifiers夢之隊:組合分類器
由於 into it is appear nds lin eas 行操作 blank sklearn實戰-乳腺癌細胞數據挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&u
數據中臺專欄(五):數棧,企業級一站式數據中臺PaaS
從數據 創建 現在 產品設計 left 引擎 采集 可能 方便 本文作者:江楓袋鼠雲CTO,花名江楓,本名寧海元。2007年加入淘寶,曾是雙十一大促技術指揮部成員,“去IOE”數據庫負責人。打造過千億級實時日誌平臺、手機淘寶日誌分析創始人、阿裏雲數加平臺技術創始人。正文:2
real山風全球獨家專欄:區塊鏈?數字貨幣,將顛覆未來的財富
出現 浪潮 競爭 免費 watermark 投資 還在 意義 希望 有一天你突然發現:市場不好做了?你的產品利潤太薄了?你的人才出現在競爭對手那了?你的企業陷入困境了.....請不要驚訝!!因為:這是一個跨界的時代!每一個行業都在整合。原來一直獲利的產品,在另外一個人手裏,
real山風全球獨家專欄:擡起頭做事,低下頭做人
它的 頭頂 遮掩 隨著 一場 風光無限 弱水三千 與他 天下 茫茫人海,熙熙攘攘。喧囂塵寰,人聲鼎沸。大千世界,萬象橫陳。紅塵環宇,琳琳朗朗。擡起頭,心胸開闊。低下頭,腳踏實地。白雲漂浮,了然我心。過眼煙雲,無擾我意。站的高,看人間萬像。低下頭,思自己得失。寄身於山水,處忘
阿裏雲朱照遠:邊緣計算,無處不在
服務 互聯 超過 每天 計算平臺 移動互 阿裏雲 距離 本質 摘要: 在2018杭州雲棲大會19號下午的論壇上,朱照遠對邊緣計算進行了深入的闡述,他認為邊緣計算是雲計算的一部分,是對雲計算邊界的拓展,雲和邊緣、終端協同,是萬物智聯時代的基本形態,這一組合,將滿足企業低成本低
【Twinkle】轉:做碼農差不多十五年了,聊聊程式設計師十五年內職業生涯規劃,共勉之
很多人以為技術人員可以做一直做下去,但是最近我發現這個觀點不完全正確,因為能一直做下去的技術人員非常稀少,因為不同的年齡段,公司對技術人員的要求會不一樣,如最近傳言華為計劃裁掉40歲以上的程式設計師,首先我認為肯定不會裁掉所有40歲以上的技術人員,如CTO或高階技術專家不