C語言 內(nèi)存分配

在C語言中,地址的由低到高基本由如下5個存儲區(qū)組成:

  1. 正文區(qū)(Code or Text)
    名字有很多瑟蜈,有的稱為代碼段爽哎,代碼區(qū)等等奕剃。但是實質(zhì)都是一樣的赶舆,都是用來存放程序編譯后形成的機(jī)器代碼。一般此內(nèi)存區(qū)是只讀的祭饭,防止程序意外修改指令。
  2. 初始化數(shù)據(jù)段(RO/RW data segment)
    程序一經(jīng)編譯好叙量,該區(qū)域便存在倡蝙,又被稱為數(shù)據(jù)區(qū)。該區(qū)包含了3種數(shù)據(jù):1绞佩、在程序中明確被初始化的全局變量(int a=2)寺鸥;2、靜態(tài)變量(包括全局靜態(tài)變量和局部靜態(tài)變量)品山;3胆建、常量數(shù)據(jù)(如字符串常量)
  3. 未初始化數(shù)據(jù)段(BSS = Block Started by Symbol)
    這段儲存的數(shù)據(jù)是:在程序中聲明但是沒有初始化的變量,如全局變量(int a;)這些變量在程序運行之前是不需要占用存儲空間的.BSS段也屬于靜態(tài)內(nèi)存分配肘交,也可存放static申明的變量笆载。
  4. 堆(heap)
    堆內(nèi)存只在程序運行時出現(xiàn),一般由程序員手動分配和釋放涯呻,一般可以使用malloc()/nalloc() & free() 函數(shù)來申請凉驻、釋放。在操作系統(tǒng)下复罐,如果程序員沒釋放涝登,一般操作系統(tǒng)可以在程序結(jié)束后回收內(nèi)存
  5. 棧(stack)
    存放程序的局部變量(但不包括static聲明的變量)。除此以外效诅,在函數(shù)被調(diào)用時胀滚,棧用來傳遞參數(shù)和返回值。

我們來通過例子具體看看一個程序在內(nèi)存的存放乱投,一個a.c文件通過編譯后會生成執(zhí)行文件a.out

源文件在out文件種對應(yīng)的部分
在例子中pear[40]和static double peach這兩個變量就是放在BBS里面的咽笼,因為只是申明了他們但并沒有初始化。而像初始化的mango和melon就是放在數(shù)據(jù)段里面的(又稱靜態(tài)區(qū))戚炫。對于局部變量來說褐荷,他們要程序運行時才會在棧里面被創(chuàng)建

out文件在運行時對應(yīng)的內(nèi)存分配

我們再通過一個程序的例子來分析里面每個變量的存放情況:

int a = 0;    //a在全局已初始化數(shù)據(jù)區(qū)(Data區(qū))
char *p1;    //p1在BSS區(qū)(未初始化全局變量) 
Define Pi 3.14 //常量,在Data區(qū)
main() 
{
int b;    //b在棧區(qū)
char s[] = "abc"; //s為數(shù)組變量嘹悼,存儲在棧區(qū)叛甫,"abc"為字符串常量层宫,存儲在已初始化數(shù)據(jù)區(qū)
char *p1,p2;  //p1其监、p2在棧區(qū)
char *p3 = "123456"; //123456\0在已初始化數(shù)據(jù)區(qū)萌腿,p3在棧區(qū) 
static int c =0;  //c為全局靜態(tài)變量抖苦,存在于已初始化數(shù)據(jù)區(qū)毁菱,靜態(tài)數(shù)據(jù)會自動初始化
p1 = (char *)malloc(10);//分配得來的10個字節(jié)的區(qū)域在堆區(qū)
p2 = (char *)malloc(20);//分配得來的20個字節(jié)的區(qū)域在堆區(qū)
free(p1);
free(p2);
}

注意:上面的“abc”是屬于常量,它和s[]是分開存的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锌历,一起剝皮案震驚了整個濱河市贮庞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌究西,老刑警劉巖窗慎,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卤材,居然都是意外死亡遮斥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門扇丛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來术吗,“玉大人,你說我怎么就攤上這事帆精〗嫌欤” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵卓练,是天一觀的道長吝镣。 經(jīng)常有香客問我,道長昆庇,這世上最難降的妖魔是什么末贾? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮整吆,結(jié)果婚禮上拱撵,老公的妹妹穿的比我還像新娘。我一直安慰自己表蝙,他們只是感情好拴测,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著府蛇,像睡著了一般集索。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天务荆,我揣著相機(jī)與錄音妆距,去河邊找鬼。 笑死函匕,一個胖子當(dāng)著我的面吹牛娱据,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盅惜,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼中剩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抒寂?” 一聲冷哼從身側(cè)響起结啼,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屈芜,沒想到半個月后郊愧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡沸伏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了动分。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毅糟。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖澜公,靈堂內(nèi)的尸體忽然破棺而出姆另,到底是詐尸還是另有隱情,我是刑警寧澤坟乾,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布迹辐,位于F島的核電站,受9級特大地震影響甚侣,放射性物質(zhì)發(fā)生泄漏明吩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一殷费、第九天 我趴在偏房一處隱蔽的房頂上張望印荔。 院中可真熱鬧,春花似錦详羡、人聲如沸仍律。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽水泉。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間草则,已是汗流浹背钢拧。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留畔师,地道東北人娶靡。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像看锉,于是被迫代替她去往敵國和親姿锭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

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