c語言內(nèi)存分布之?dāng)?shù)據(jù)段

不管我們以后是自己寫代碼還是讀別人的代碼省容,都應(yīng)該想想這個變量默認(rèn)存儲的位置。在我們以后的嵌入式開發(fā)中燎字,技巧性的代碼越來越多的時候腥椒,我們可能把某一些代碼放在一段。我們可以通過修改變量或者代碼默認(rèn)放置的段候衍,讓它被放到其它的段中笼蛛。我們也可以自己定義一個新的段。

隨著運行脱柱,椃サ空間是隨時會變化的。椪ノ空間臨時的去存儲一些變量惨好,當(dāng)我們進(jìn)入一個函數(shù),系統(tǒng)就會在椝婀耄空間去分配一片內(nèi)存去保存這個函數(shù)里面所有的變量日川。當(dāng)函數(shù)執(zhí)行完之后,這一片內(nèi)存的數(shù)據(jù)就被銷毀了矩乐。當(dāng)我們在初學(xué)的時候龄句,就千萬不要犯把局部變量給別人的錯誤。

全局的數(shù)據(jù)空間和只讀數(shù)據(jù)段散罕,代碼段都是在運行之前就已經(jīng)分配好了的分歇。所以我們在打印信息的時候應(yīng)該盡量不要使用太多的字符串,否則容易導(dǎo)致程序的可執(zhí)行文件很大欧漱。所以我們在最后發(fā)布程序的release版本里面去除了我們一些調(diào)試用的信息职抡。

測試代碼如下

我們在main函數(shù)外面申請了一個全局變量b,但是我們并沒有為這個b賦初始值误甚。它僅僅只是為這個變量圈出了一塊內(nèi)存缚甩,里面有為全局變量自動初始化的0值谱净。

運行結(jié)果如下

上面的結(jié)果是沒有變量b的結(jié)果,下面是添加全局變量b的結(jié)果擅威。bss段就是未初始化的全局變量存儲的段壕探,上面的全局變量b就在這個段中分配了四個字節(jié)(盡管系統(tǒng)已經(jīng)將它初始化為0,但是并不是我們初始化的)郊丛。

測試代碼如下

我們只是將未初始化的變量b將它初始化了李请。

運行結(jié)果如下

可以看到,在未初始化的字段里面少了四個字節(jié)宾袜,而在已初始化的字段里面多了四個字節(jié)捻艳。所以我們也將date稱做全局初始化數(shù)據(jù)空間,bss稱做全局未初始化數(shù)據(jù)空間庆猫。局部的變量不管有沒有初始化都是存儲在棧上认轨。

Static關(guān)鍵字聲明變量的時候,系統(tǒng)就會將它認(rèn)為是一個全局變量月培,即使它在函數(shù)內(nèi)部聲明嘁字。此時,它分配的地址也就在全局的數(shù)據(jù)空間杉畜。

測試代碼如下

運行結(jié)果如下

這就是聲明變量a為靜態(tài)數(shù)據(jù)前后的結(jié)果纪蜒,此時分配的段為全局未初始化數(shù)據(jù)空間,現(xiàn)在它不在棧中此叠,那么就不會隨著棧的彈出而被銷毀了纯续。靜態(tài)數(shù)據(jù)段的消失是在整個程序都消失之后才會消失。

測試代碼如下

我們在兩個函數(shù)里面聲明了兩個一樣的變量a灭袁,雖然它們是一樣的名字猬错,但是它們在系統(tǒng)中的訪問卻是不一樣的,fun函數(shù)里面的a++調(diào)用的是該函數(shù)里面的茸歧。Main函數(shù)也是對應(yīng)的倦炒。

運行結(jié)果如下

這是添加一個fun函數(shù)前后的結(jié)果,編譯器并沒有對兩個全局變量報錯软瞎,它將fun函數(shù)里面的靜態(tài)變量a放到了data段中逢唤。雖然它們是一樣的變量名,但是在編譯器中涤浇,它們有不一樣的后綴鳖藕。

我們可以通過nm build查看靜態(tài)的數(shù)據(jù)段,前面為地址只锭,兩個變量的后綴是不一樣的吊奢。

Static相當(dāng)于全局的數(shù)據(jù)空間的一個顯示分配的符號,它可以更改局部數(shù)據(jù)的默認(rèn)存儲段,雖然它們的訪問依然是局部的页滚,但是存儲位置已經(jīng)在全局?jǐn)?shù)據(jù)段中了。


原文鏈接:http://www.maiziedu.com/wiki/c/memory/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铺呵,一起剝皮案震驚了整個濱河市裹驰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌片挂,老刑警劉巖幻林,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異音念,居然都是意外死亡沪饺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門闷愤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來整葡,“玉大人,你說我怎么就攤上這事讥脐≡饩樱” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵旬渠,是天一觀的道長俱萍。 經(jīng)常有香客問我,道長告丢,這世上最難降的妖魔是什么枪蘑? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮岖免,結(jié)果婚禮上岳颇,老公的妹妹穿的比我還像新娘。我一直安慰自己觅捆,他們只是感情好赦役,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著栅炒,像睡著了一般掂摔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赢赊,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天乙漓,我揣著相機(jī)與錄音,去河邊找鬼释移。 笑死叭披,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的玩讳。 我是一名探鬼主播涩蜘,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼嚼贡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了同诫?” 一聲冷哼從身側(cè)響起粤策,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎误窖,沒想到半個月后叮盘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡霹俺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年柔吼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丙唧。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡愈魏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出艇棕,到底是詐尸還是另有隱情蝌戒,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布沼琉,位于F島的核電站北苟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏打瘪。R本人自食惡果不足惜友鼻,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闺骚。 院中可真熱鬧彩扔,春花似錦、人聲如沸僻爽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胸梆。三九已至敦捧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碰镜,已是汗流浹背兢卵。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留绪颖,地道東北人秽荤。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親窃款。 傳聞我的和親對象是個殘疾皇子课兄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容