一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C語言程序內存四區(qū)(棧區(qū),堆區(qū),全局區(qū),代碼區(qū))

 cjavahtml 2016-12-26

一,綜述
在C語言程序中, 代碼在內存中進行執(zhí)行的時候,我們粗略的將程序所占用的內存分為四個區(qū)域—-棧區(qū),堆區(qū),全局區(qū),代碼區(qū).
每個程序都有唯一的四個內存區(qū)域.我們需要熟悉和了解各個區(qū)域的特性,例如存儲什么類型的數(shù)據(jù), 有誰去申請開辟, 又有誰去管理釋放等等

二,內存四區(qū)介紹

<一>棧區(qū)
由編譯器自動分配釋放, 存放函數(shù)的參數(shù)值,局部變量等.
例如: 參數(shù)buf,參數(shù)bufsize和size都是存放在棧區(qū).當函數(shù)執(zhí)行完畢的時候,自動釋放

void recev(char* buf, int bufsize){ int size;}
  • 1
  • 2
  • 3

<二> 堆區(qū)
一般由程序員分配釋放(動態(tài)內存申請與釋放),若程序員不釋放,程序結束時可能由操作系統(tǒng)回收

例如:下面的src所指向的內存空間就是在堆區(qū)

char* src = (char*) malloc(sizeof(buf) * sizeof(10));
  • 1

<三>全局區(qū)(靜態(tài)區(qū))
全局變量和靜態(tài)變量存放在此. 里面細分有一個常量區(qū), 字符串常量和其他常量也存放在此. 該區(qū)域是在程序結束后由操作系統(tǒng)釋放.

<四> 程序代碼區(qū)
這個區(qū)域存放函數(shù)體的二進制代碼.也是由操作系統(tǒng)進行管理的

三, 劃分內存四區(qū)的意義
C語言程序中,根據(jù)是局部變量,全局變量, 常量還是通過malloc等類似的函數(shù)分配內存空間, 把他們放到對應的內存區(qū)中.這樣就賦予了這些變量或常量不同的生命周期, 不同的釋放方式. 根據(jù)我們程序的需要,我們在編碼過程中,聲明不同的變量類型, 使他們有不同的聲明長度, 不同的釋放方式,給我們更大的靈活編程

四,內存四區(qū)的一個示例

代碼如下:

/*變量生命周期示例*/#include 'stdafx.h'#include #include/*訪問棧區(qū)*/int visitStackArea(){ printf('-----------------visitStackArea()---------------------\n'); int a = 10; printf('a的地址 %d\n',&a); return a;}/*訪問全局區(qū)*/char* visitGlobalArea(){ printf('----------------visitGlobalArea()----------------------\n'); char *str = 'abcdefg'; printf(' visitGlobalArea() str的地址是: %d\n',str); return str;}/*訪問堆區(qū)*/int* visitHeapArea(){ printf('-----------------visitHeapArea()---------------------\n'); int* chs = NULL; chs = (int*) malloc(sizeof(int)*10); for(int i=0; i<10; i++){ *(chs+i) = i; } printf(' visitHeapArea() chs的地址是: %d\n',chs); return chs;}int main(){ int a = visitStackArea(); printf('main通過visitStackArea()得到a的值, a的地址是: %d\n',&a); char* str = visitGlobalArea(); printf('main通過visitGlobalArea()得到str的值, str的地址是: %d\n',str); int* chs = visitHeapArea(); printf('main通過visitHeapArea()得到的chs的值, chs的地址是: %d\n',chs); free(chs); return 0;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

運行結果:

-----------------visitStackArea()---------------------a的地址 3209584main通過visitStackArea()得到a的值, a的地址是: 3209836----------------visitGlobalArea()---------------------- visitGlobalArea() str的地址是: 20470000main通過visitGlobalArea()得到str的值, str的地址是: 20470000-----------------visitHeapArea()--------------------- visitHeapArea() chs的地址是: 7573184main通過visitHeapArea()得到的chs的值, chs的地址是: 7573184請按任意鍵繼續(xù). . .
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

結果分析:
1,visitStackArea()函數(shù)內的地址是:3209584,而main函數(shù)調用visitStackArea()得到的a的地址是:3209836. 雖然main函數(shù)調用了函數(shù)visitStackArea(),但是 a是兩塊內存中的 . 當main調用visitStackArea()結束后, 編譯器就把3209584地址釋放了, 在main函數(shù)中重新開辟地址3209836來存儲a

2,visitGlobalArea()函數(shù)內的str地址是:20470000, main函數(shù)調用visitGlobalArea()的地址也是20470000, 說明str的聲明周期存在于整個程序的運行期間. 我們由上面可知, 他是存儲在全局區(qū)的,當程序退出后由操作系統(tǒng)進行釋放管理

3,visitHeapArea()函數(shù)內的chs地址是:7573184,main函數(shù)調用visitHeapArea()得到的chs地址也是:7573184,也說明chs聲明周期比較長, 他聲明周期長到何種程度,這有程序員來決定, 調用free方法來釋放, 如果堆區(qū)的內存不手動free,那么將造成內存泄露(Memory Leak)

PS:假設有兩個函數(shù)A,B, A調用B, 如果A主調函數(shù)想使用被調函數(shù)B中的變量分配的內存,可以嗎?

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    av中文字幕一区二区三区在线 | 国产情侣激情在线对白| 亚洲欧美日韩网友自拍| 日本午夜乱色视频在线观看| 亚洲淫片一区二区三区| 日本欧美一区二区三区在线播| 中文精品人妻一区二区| 欧美尤物在线观看西比尔| 一本久道久久综合中文字幕| 九九热这里有精品20| 欧美午夜一级艳片免费看| 亚洲少妇人妻一区二区| 日本大学生精油按摩在线观看| 欧美黑人精品一区二区在线| 深夜福利亚洲高清性感| 欧美一区二区在线日韩| 东京干男人都知道的天堂| 久久精品a毛片看国产成人| 日韩欧美一区二区不卡视频| 福利一区二区视频在线| 亚洲一区二区三在线播放| 欧洲日韩精品一区二区三区| 亚洲一区二区亚洲日本| 日韩人妻av中文字幕| 国产一区二区精品丝袜| 在线亚洲成人中文字幕高清| 国产免费人成视频尤物| 国产欧美一区二区另类精品| 99视频精品免费视频| 日本最新不卡免费一区二区| 91精品国产品国语在线不卡| 欧美整片精品日韩综合| 日韩在线中文字幕不卡| 亚洲综合日韩精品欧美综合区| 风韵人妻丰满熟妇老熟女av| 精品国产av一区二区三区不卡蜜 | 精品香蕉国产一区二区三区| 日韩中文字幕人妻精品| 九九热在线视频精品免费| 日本视频在线观看不卡| 成人欧美一区二区三区视频|