關(guān)鍵字static的使用方法
粉絲提問
粉絲問題,總結(jié)一下:關(guān)鍵字static的使用方法。
問題
要想搞清楚關(guān)鍵字static的使用方法,必須首先搞清楚,可執(zhí)行程序段的分類以及各段在內(nèi)存區(qū)的邏輯地址的映射。
本文配套視頻,請見次條文章《【視頻講解】C語言static關(guān)鍵詞》
一、可執(zhí)行程序內(nèi)存分配
1. 可執(zhí)行程序程序分段
一個程序的3個基本段:text段,data段,bss段
BSSBSS(Block Started by Symbol)通常是指用來存放程序中未初始化的全局變量和靜態(tài)變量的一塊內(nèi)存區(qū)域。
特點是:可讀寫的,在程序執(zhí)行之前BSS段會自動清0。
所以,未初始的全局變量在程序執(zhí)行之前已經(jīng)成0了。
注意和數(shù)據(jù)段的區(qū)別,BSS存放的是未初始化的全局變量和靜態(tài)變量,數(shù)據(jù)段存放的是初始化后的全局變量和靜態(tài)變量。
UNIX下可使用size命令查看可執(zhí)行文件的段大小信息。如size a.out。
數(shù)據(jù)段.data存放在編譯階段(而非運行時)就能確定的數(shù)據(jù),可讀可寫。
也就是通常所說的靜態(tài)存儲區(qū),賦了初值的全局變量和賦初值的靜態(tài)變量存放在這個區(qū)域,常量也存在這個區(qū)域。數(shù)據(jù)段,代碼段在程序運行之前就已經(jīng)確定了的。
代碼段.text代碼段通常是指用來存放程序執(zhí)行代碼的一塊內(nèi)存區(qū)域。
這部分區(qū)域的大小在程序運行前就已經(jīng)確定,并且內(nèi)存區(qū)域通常屬于只讀, 某些架構(gòu)也允許代碼段為可寫,即允許自修改程序。
在代碼段中,也有可能包含一些只讀的常數(shù)變量,例如字符串常量等。
text段在編譯時確定,內(nèi)存中被映射為只讀,但date段與bss段是可寫的。
2. c語言五大內(nèi)存分區(qū)棧區(qū)(堆棧區(qū)stack)
堆棧是由編譯器自動分配釋放,存放函數(shù)的參數(shù)和局部變量的值(auto類型),操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。棧的申請是由系統(tǒng)自動分配,如在函數(shù)內(nèi)部申請一個局部變量int h,同時判斷所申請空間是否小于棧的剩余空間,如果小于則為其開辟空間,為程序提供內(nèi)存,否則將報異常提示棧溢出。
堆(heap)
堆一般由程序員分配釋放,若程序員不釋放,程序結(jié)束可能由OS回收。
它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式類似于鏈表,申請則是程序員自己操作使用malloc或new。
申請過程比較復雜,當系統(tǒng)收到程序的申請時,會遍歷記錄空閑內(nèi)存地址的鏈表,以求尋找第一個空間大于所申請空間的堆節(jié)點,然后將該節(jié)點從空閑節(jié)點鏈表中刪除,并將該節(jié)點的空間分配給程序,有些情況下,新申請的內(nèi)存塊的首地址記錄本次分配的內(nèi)存塊的大小,這樣在free()時能正確的釋放內(nèi)存空間。
全局靜態(tài)存儲區(qū)
全局變量與靜態(tài)變量的存儲是放在一塊的,初始化的全局變量與靜態(tài)變量存放在一塊區(qū)域,未初始化的全局變量與未初始化的靜態(tài)變量存放在相鄰的另一塊區(qū)域。
文字常量區(qū)
常量字符串就是放在該部分,只讀存儲區(qū),程序結(jié)束后由系統(tǒng)釋放
程序代碼區(qū)
存放程序的二進制代碼區(qū)。
兩者之間區(qū)別是:代碼段,數(shù)據(jù)段,堆棧段是cpu級別的概念,五大分區(qū)屬于語言級別的概念,兩者是不同的概念。

請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
推薦專題
- 1 AI 眼鏡讓百萬 APP「集體失業(yè)」?
- 2 大廠紛紛入局,百度、阿里、字節(jié)搶奪Agent話語權(quán)
- 3 深度報告|中國AI產(chǎn)業(yè)正在崛起成全球力量,市場潛力和關(guān)鍵挑戰(zhàn)有哪些?
- 4 上海跑出80億超級獨角獸:獲上市公司戰(zhàn)投,干人形機器人
- 5 國家數(shù)據(jù)局局長劉烈宏調(diào)研格創(chuàng)東智
- 6 一文看懂視覺語言動作模型(VLA)及其應(yīng)用
- 7 下一代入口之戰(zhàn):大廠為何紛紛押注智能體?
- 8 百億AI芯片訂單,瘋狂傾銷中東?
- 9 Robotaxi新消息密集釋放,量產(chǎn)元年誰在領(lǐng)跑?
- 10 格斗大賽出圈!人形機器人致命短板曝光:頭腦過于簡單