C基礎-內存的四驅模型

數(shù)據(jù)類型的本質

數(shù)據(jù)類型本質:一個固定大小連續(xù)的內存塊卫键。
數(shù)據(jù)類型的作用:分配內存空間大小

變量的本質

變量的本質:一段連續(xù)內存空間的別名

程序運行流程

1.操作系統(tǒng)把物理硬盤的代碼 load到內存中(運行的是 .exe文件)
2.操作系統(tǒng)把C 代碼分成四個區(qū)
3.操作系統(tǒng)找到main 函數(shù)的執(zhí)行入口

內存四驅模型

在 c/c++ 中我們將運行時數(shù)據(jù)恩敌,分為四個區(qū)域分別是:棧區(qū),堆區(qū)晰甚,數(shù)據(jù)區(qū)钙蒙,代碼區(qū):
1.棧區(qū):存放函數(shù)的參數(shù)值,局部變量的值等,由編譯器自動分配釋放。
2.堆區(qū):存放的是一般我們自己malloc()或者new 出來的對象愿吹,一般由程序員分配釋放, 若程序員不釋放惜姐,程序結束時可能由 OS 回收犁跪。malloc對應free,new 對應 delete
3.數(shù)據(jù)區(qū)(靜態(tài)區(qū)/全局區(qū)):存放全局變量椿息、靜態(tài)變量和常量字符串等等。 程序結束后由系統(tǒng)釋放
4.存放函數(shù)體的二進制代碼坷衍。

*1. 棧區(qū)
void change2(int * a){
    *a = 200;
}
void change1(int a){
    a = 200;
}

void main(){
    int  a = 100;
    int b = 10;
    change1(b);
    change2(&a);
    printf("change1 =%d,change2=%d", b,a);
    getchar();
}

//結果:change1 =10,change2=200

從結果上發(fā)現(xiàn)changge1()這個方法并沒有改變b的值寝优,而change2 () 改變了。

當執(zhí)行 到 int a = 100; int b = 10時 棧區(qū)的結構時這樣的


image.png

當執(zhí)行到change1(b)函數(shù)體內的時候枫耳,只是把變量a的值給了change1()函數(shù)的a.當該函數(shù)體執(zhí)行完后乏矾,因為棧區(qū)時會自己回收的所以change1()的內存數(shù)據(jù)是會被清空的。所以b的值沒有改變 b=10嘉涌。
當執(zhí)行到change2(&a);函數(shù)體內的時候妻熊,因為是傳遞的是a地址,然后通過地址修改a 的值仑最,當
change2(&a)執(zhí)行完 內存被清空后扔役,a 的值已經發(fā)生改變了。


image.png
*2. 全局區(qū)
char * getStr1(){
    char *p1 = "aaaaa";
    return p1;
}

char *getStr2(){
    char *p2 = "aaaaa";
    return p2;
}

void main(){
    char *p1 = NULL;
    char *p2 = NULL;

    p1 = getStr1();
    p2 = getStr2();

    printf("p1:%s , p2:%s \n", p1, p2);
    printf("p1:%d , p2:%d \n", p1, p2);

    getchar();

    // 打印結果:p1:aaaaa , p2:aaaaa  p1:10181068, p2 : 10181068
}

從打印結果可以看出p1 和p2 地址相同警医,指向的內容也相同
函數(shù)從main()函數(shù)入口執(zhí)行亿胸,

 char *p1 = NULL;
 char *p2 = NULL;

對應的四驅模型如圖:

編譯器分別將變量p1,p2在棧區(qū)壓棧,并給定初始值為NULL预皇。
當執(zhí)行getStr1()到函數(shù)體時如圖:

當執(zhí)行 p1 = getStr1()函數(shù)返回值賦給p1的時候侈玄,編譯器會將getstr()函數(shù)在運行期其間申請的所有的棧區(qū)內存進行釋放。內存四區(qū)如下:

同一樣吟温,當執(zhí)行p2 = getStr2();語句時基本的內變化和p1相同序仙,唯一不同的是編譯器會對我我們的代碼進行優(yōu)化,p2指向的內存的值和p1相同時鲁豪,編譯器會只保留一個潘悼。這樣內存四區(qū)如下

*3. 堆區(qū)
char *getMem(){

    char *p1 = NULL;
    p1 = (char *)malloc(sizeof(char)* 10);  //申請內存空間
    return p1;
}

void main(){
    
    char *tmp = NULL;
    tmp = getMem();
    strcpy(tmp, "aaabbb"); //向tmp做指向的內存空間中copy數(shù)據(jù)
    printf("tmp:%s.\n", tmp);
    getchar();

}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市爬橡,隨后出現(xiàn)的幾起案子治唤,更是在濱河造成了極大的恐慌,老刑警劉巖糙申,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宾添,死亡現(xiàn)場離奇詭異,居然都是意外死亡柜裸,警方通過查閱死者的電腦和手機缕陕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疙挺,“玉大人榄檬,你說我怎么就攤上這事∠瓮常” “怎么了鹿榜?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵海雪,是天一觀的道長。 經常有香客問我舱殿,道長奥裸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任沪袭,我火速辦了婚禮湾宙,結果婚禮上,老公的妹妹穿的比我還像新娘冈绊。我一直安慰自己侠鳄,他們只是感情好,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布死宣。 她就那樣靜靜地躺著伟恶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毅该。 梳的紋絲不亂的頭發(fā)上博秫,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機與錄音眶掌,去河邊找鬼挡育。 笑死,一個胖子當著我的面吹牛朴爬,可吹牛的內容都是我干的即寒。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼召噩,長吁一口氣:“原來是場噩夢啊……” “哼母赵!你這毒婦竟也來了?” 一聲冷哼從身側響起蚣常,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤市咽,失蹤者是張志新(化名)和其女友劉穎痊银,沒想到半個月后抵蚊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡溯革,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年贞绳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片致稀。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡冈闭,死狀恐怖,靈堂內的尸體忽然破棺而出抖单,到底是詐尸還是另有隱情萎攒,我是刑警寧澤遇八,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站耍休,受9級特大地震影響刃永,放射性物質發(fā)生泄漏。R本人自食惡果不足惜羊精,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一斯够、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喧锦,春花似錦读规、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至供汛,卻和暖如春枪汪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怔昨。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工雀久, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人趁舀。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓赖捌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親矮烹。 傳聞我的和親對象是個殘疾皇子越庇,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內容

  • 這幾天有朋友反映給小編說讓多發(fā)點關于面試的文章卤唉,小編深知從事IT行業(yè)的難處,跳槽多仁期,加班多桑驱,薪資不樂觀,大多數(shù)朋友...
    諸葛青云999閱讀 10,083評論 0 6
  • 最全的iOS面試題及答案 iOS面試小貼士 ———————————————回答好下面的足夠了-----------...
    zweic閱讀 2,708評論 0 73
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用跛蛋,...
    LZM輪回閱讀 3,333評論 0 6
  • 1.寫一個NSString類的實現(xiàn) +(id)initWithCString:(c*****t char *)nu...
    韓七夏閱讀 3,777評論 2 37
  • 學習跳古典舞第三天熬的,《知否、知否》赊级,雖然很美押框,但是好難跳的一個舞蹈,老師說我們從最開始的在地上連滾帶爬的理逊,到現(xiàn)在可...
    花飛雪兒閱讀 137評論 0 0