C語言-內(nèi)存四區(qū)

內(nèi)存總體被分為四大區(qū)域:堆區(qū)、棧區(qū)捌显、全局區(qū)茁彭、代碼區(qū)。每個區(qū)所存放的內(nèi)容以及內(nèi)容的聲明周期不同扶歪。將內(nèi)存進行區(qū)域劃分有利于內(nèi)存管理理肺,從而提高對數(shù)據(jù)的處理效率。

A. 全局區(qū)

全局區(qū)也稱為靜態(tài)區(qū),存放全局變量和靜態(tài)變量,其中初始化的全局變量和靜態(tài)變量存放在同一區(qū)塊说墨,未初始化的全局變量和靜態(tài)變量存放在相鄰的區(qū)塊胖笛,程序結(jié)束后,由系統(tǒng)自動釋放画切。

1. 樣例分析
char * getStr1() {
    char *fp1 = "abcd";
    return fp1;
};

char * getStr2() {
    char *fp2 = "abcd";
    return fp2;
}

  int main() {
    char *p = getStr1();
    char *q = getStr2();
    printf("p:%s, p:%p\n", p, p);
    printf("q:%s, q:%p\n", q, q);

    return 0;
}
2. 打印結(jié)果
p:abcd, p:0x100b68f8e
q:abcd, q:0x100b68f8e
3. 內(nèi)存分配圖
4. 分析:

1竣稽、進入main函數(shù)
2、在棧中創(chuàng)建char *變量p
3霍弹、進入getStr1方法
4毫别、在棧中創(chuàng)建char *變量fp1
5、字符串abcd屬于靜態(tài)變量典格,存儲在全局區(qū)岛宦,且由系統(tǒng)進行釋放。通過打印得知其地址值為0x100b68f8e
6耍缴、將字符串的地址賦值給指針變量fp1砾肺,那么變量fp1則指向字符串所在的內(nèi)存
7、返回fp1的指針防嗡,并將該指針賦值給變量p变汪,getStr1方法結(jié)束,fp1變量銷毀蚁趁,變量p指向字符串的所在的內(nèi)存
8裙盾、創(chuàng)建并賦值變量q的方式同于步驟2步驟7
因此最后打印的結(jié)果是變量p內(nèi)存存放的值與q相同,p指向的地址值也與q相同他嫡。

B. 棧區(qū):

棧區(qū)由編譯器自動分配釋放局部變量和函數(shù)參數(shù)的值番官。

1. 樣例分析
char * getStr3() {
    char str[] = "abcd";
    return str;
};

int main() {
    char *strp = getStr3();
    printf("strp:%s, strp:%p", strp, strp);
    return 0;
}
2. 打印結(jié)果
strp:?M?y??7????, strp:0x7ffee691376b
3. 繪制內(nèi)存圖
4. 分析:

1、進入main函數(shù)
2钢属、棧中創(chuàng)建strp變量
3徘熔、進入getStr3函數(shù)
4、棧中創(chuàng)建str變量
5署咽、全局區(qū)存入字符串abcd
6近顷、將全局區(qū)的字符串復(fù)制一份賦值給str變量
7生音、返回str變量的地址,getStr3函數(shù)運行結(jié)束窒升,str變量釋放缀遍,將str的地址值賦值給變量strpstrp指向str的內(nèi)存
8饱须、因str的內(nèi)存已經(jīng)被釋放域醇,所以str內(nèi)存中的內(nèi)容未知,故而亂碼

C. 堆區(qū)分析

堆區(qū)由程序員手動創(chuàng)建和釋放蓉媳,若程序員未釋放對應(yīng)的變量譬挚,那么在程序結(jié)束后可能會被系統(tǒng)釋放。

1. 樣例分析
char * getStr4() {
    char *str = (char *)malloc(100);
     printf("str: %p\n", str);
        if (str == NULL) {
        return NULL;
    }
    strcpy(str, "abcd");
    return str;
}

int main() {
    char *strp1 = getStr4();
    if (strp1 != NULL) {
        printf("strp1:%s, strp1:%p\n", strp1, strp1);
        free(strp1);
        strp1 = NULL;
    }
    return 0;
}
2. 打印結(jié)果:
str: 0x7fd490c02a70
strp1:abcd, strp1:0x7fd490c02a70
3. 內(nèi)存圖繪制
4. 分析

1酪呻、進入main函數(shù)
2减宣、棧區(qū)創(chuàng)建strp1變量
3、進入getStr4函數(shù)
4玩荠、棧區(qū)創(chuàng)建str變量
5漆腌、堆區(qū)分配內(nèi)存,并將分配好的內(nèi)存地址賦值給str變量阶冈,str指向分配好的堆內(nèi)存
6闷尿、全局區(qū)分配字符串abcd的內(nèi)存,并將其值復(fù)制一份賦值給堆中分配的內(nèi)存
7女坑、返回str變量的值填具,getStr4函數(shù)結(jié)束,str變量釋放匆骗,并將值賦值給strp1劳景,strp1指向堆中分配的內(nèi)存
8、打印結(jié)束后绰筛,釋放堆中的內(nèi)存

D. 棧的生長方向和內(nèi)存存放方向

棧的生長方向:高字節(jié) -> 低字節(jié)
堆的生長方向:低字節(jié) -> 高字節(jié)
內(nèi)存的存放方向: 低字節(jié) -> 高字節(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枢泰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铝噩,更是在濱河造成了極大的恐慌衡蚂,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骏庸,死亡現(xiàn)場離奇詭異毛甲,居然都是意外死亡,警方通過查閱死者的電腦和手機具被,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門玻募,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人一姿,你說我怎么就攤上這事七咧≡颈梗” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵艾栋,是天一觀的道長爆存。 經(jīng)常有香客問我,道長蝗砾,這世上最難降的妖魔是什么先较? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮悼粮,結(jié)果婚禮上闲勺,老公的妹妹穿的比我還像新娘。我一直安慰自己扣猫,他們只是感情好菜循,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著申尤,像睡著了一般债朵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瀑凝,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音臭杰,去河邊找鬼粤咪。 笑死,一個胖子當(dāng)著我的面吹牛渴杆,可吹牛的內(nèi)容都是我干的寥枝。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼磁奖,長吁一口氣:“原來是場噩夢啊……” “哼囊拜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起比搭,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤冠跷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后身诺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜜托,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年霉赡,在試婚紗的時候發(fā)現(xiàn)自己被綠了橄务。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡穴亏,死狀恐怖蜂挪,靈堂內(nèi)的尸體忽然破棺而出重挑,到底是詐尸還是另有隱情,我是刑警寧澤棠涮,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布谬哀,位于F島的核電站,受9級特大地震影響故爵,放射性物質(zhì)發(fā)生泄漏玻粪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一诬垂、第九天 我趴在偏房一處隱蔽的房頂上張望劲室。 院中可真熱鬧,春花似錦结窘、人聲如沸很洋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喉磁。三九已至,卻和暖如春官脓,著一層夾襖步出監(jiān)牢的瞬間协怒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工卑笨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留孕暇,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓赤兴,卻偏偏與公主長得像妖滔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子桶良,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

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