關(guān)鍵字static的使用方法
粉絲提問(wèn)
粉絲問(wèn)題,總結(jié)一下:關(guān)鍵字static的使用方法。

問(wèn)題
要想搞清楚關(guān)鍵字static的使用方法,必須首先搞清楚,可執(zhí)行程序段的分類以及各段在內(nèi)存區(qū)的邏輯地址的映射。
本文配套視頻,請(qǐng)見(jiàn)次條文章《【視頻講解】C語(yǔ)言static關(guān)鍵詞》
一、可執(zhí)行程序內(nèi)存分配
1. 可執(zhí)行程序程序分段
一個(gè)程序的3個(gè)基本段:text段,data段,bss段

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

兩者之間區(qū)別是:代碼段,數(shù)據(jù)段,堆棧段是cpu級(jí)別的概念,五大分區(qū)屬于語(yǔ)言級(jí)別的概念,兩者是不同的概念。
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)
圖片新聞
-

落地?zé)o錫!京東首個(gè)物流機(jī)器人超級(jí)工廠來(lái)了
-

OpenAI發(fā)布的AI瀏覽器,市場(chǎng)為何反應(yīng)強(qiáng)烈?
-

馬云重返一線督戰(zhàn),阿里重啟創(chuàng)始人模式
-

機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹(shù)機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-

存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-

長(zhǎng)安汽車母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-

豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-

字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
最新活動(dòng)更多
-
即日-5.20立即下載>> 【限時(shí)免費(fèi)】物理場(chǎng)仿真助力生物醫(yī)學(xué)領(lǐng)域技術(shù)創(chuàng)新
-
精彩回顧立即查看>> 【直播】 智測(cè)未來(lái)·2026海克斯康春季產(chǎn)品創(chuàng)新日
-
精彩回顧立即查看>> 【線下論壇】新唐科技×芯唐南京 2026 年度研討會(huì)
-
精彩回顧立即查看>> OFweek 2026(第十五屆)中國(guó)機(jī)器人產(chǎn)業(yè)大會(huì)
-
精彩回顧立即查看>> 維科杯· OFweek 2025中國(guó)機(jī)器人行業(yè)年度評(píng)選
-
精彩回顧立即查看>> 【在線會(huì)議】液冷服務(wù)器信號(hào)完整性及冷卻液關(guān)鍵電參數(shù)測(cè)試
推薦專題
- 1 特斯拉Optimus Gen3量產(chǎn)在即,哪些環(huán)節(jié)最具確定性?
- 2 OpenAI深夜王炸!ChatGPT Images 2.0實(shí)測(cè):中文穩(wěn)、細(xì)節(jié)炸,設(shè)計(jì)師慌了
- 3 AI狂歡遇上油價(jià)破百,全球股市還能漲多久? | 產(chǎn)聯(lián)看全球
- 4 6000億美元估值錨定:字節(jié)跳動(dòng)的“去單一化”突圍與估值重構(gòu)
- 5 Tesla AI5芯片最新進(jìn)展總結(jié)
- 6 連夜測(cè)了一波DeepSeek-V4,我發(fā)現(xiàn)它可能只剩“審美”這個(gè)短板了
- 7 熱點(diǎn)丨AI“瑜亮之爭(zhēng)”:既生OpenClaw,何生Hermes?
- 8 2026,人形機(jī)器人只贏了面子
- 9 AI界的殺豬盤:9秒刪庫(kù)跑路,全員被封號(hào),還繼續(xù)扣錢!
- 10 AI Infra產(chǎn)業(yè)鏈卡在哪里了?
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市



分享





