<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          C語言中內(nèi)存四區(qū)的詳解

          共 3781字,需瀏覽 8分鐘

           ·

          2022-05-14 14:55

          來自:今日頭條,作者:抖點(diǎn)料er

          鏈接:https://www.toutiao.com/article/7046019680989037069/

          1、內(nèi)存四區(qū)

          1.1數(shù)據(jù)類型本質(zhì)分析

          1.1.1數(shù)據(jù)類型的概念

          • “類型”是對數(shù)據(jù)的抽象

          • 類型相同的數(shù)據(jù)有相同的表示形式、存儲格式以及相關(guān)的操作

          • 程序中使用的所有數(shù)據(jù)都必定屬于某一種數(shù)據(jù)類型

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

          • 數(shù)據(jù)類型可理解為創(chuàng)建變量的模具:是固定內(nèi)存大小的別名。

          • 數(shù)據(jù)類型的作用:編譯器預(yù)算對象(變量)分配的內(nèi)存空間大小。

          • 注意:數(shù)據(jù)類型只是模具,編譯器并沒有分酤空間,只有根據(jù)類型(模具)


          創(chuàng)建變量(實(shí)物),編譯器才會分配空間。

          1.2變量的本質(zhì)分析

          1.2.1變量的概念

          概念:既能讀又能寫的內(nèi)存對象,稱為變量;若一旦初始化后不能修改的對象則稱為常量。


          變量定義形式:類型標(biāo)識符,標(biāo)識符,…,標(biāo)識符;

          1.2.2變量的本質(zhì)

          1、程序通過變量來申請和命名內(nèi)存空間int a = 0。

          2、通過變量名訪問內(nèi)存空間。

          1.3程序的內(nèi)存四區(qū)模型

          流程說明


          1、操作系統(tǒng)把物理硬盤代碼load到內(nèi)存

          2、操作系統(tǒng)把c代碼分成四個(gè)區(qū)


          棧區(qū)( stack):由編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等

          堆區(qū)(heap):一般由程序員分配釋放(動態(tài)內(nèi)存申請與釋放),若程序員不釋放程序結(jié)束時(shí)可能由操作系統(tǒng)回收

          全局區(qū)(靜態(tài)區(qū))( statIc):全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域,該區(qū)域在程序結(jié)束后由操作系統(tǒng)釋放

          常量區(qū):字符串常量和其他常量的存儲位置,程序結(jié)束后由操作系統(tǒng)釋放。

          程序代碼區(qū):存放函數(shù)體的二進(jìn)制代碼。

          3、操作系統(tǒng)找到main函數(shù)入口執(zhí)行

          1.4函數(shù)調(diào)用模型


          1.5函數(shù)調(diào)用變量傳遞分析

          (1)


          (2)


          (3)


          (4)


          (5)


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


          相關(guān)代碼:


          02_數(shù)據(jù)類型本質(zhì).c


          #define?_CRT_SECURE_NO_WARNINGS
          #include
          #include
          #include
          #include


          int?main()
          {
          ????int?a;//告訴編譯器,分配4個(gè)字節(jié)
          ????int?b[10];//告訴編譯器,分配4*10個(gè)字節(jié)

          ????/*
          ????類型本質(zhì):固定內(nèi)存塊大小別名
          ????可以通過sizeof()測試?
          ????*/

          ????printf("sizeof(a)=%d,sizeof(b)=%d\n",?sizeof(a),?sizeof(b));

          ????//打印地址
          ????//數(shù)組名稱,數(shù)組首元素地址,數(shù)組首地址
          ????printf("b:%d,&b:%d\n",b,&b);//地址相同

          ????//b,&b數(shù)組類型不同
          ????//b,數(shù)組首地址元素??一個(gè)元素4字節(jié),+1?地址+4
          ????//&b,整個(gè)數(shù)組首地址??一個(gè)數(shù)組4*10=40字節(jié),?+1??地址+40
          ????printf("b+1:%d,&b+1:%d\n",?b?+?1,?&b?+?1);//不同


          ????//指針類型長度,32位機(jī)器32位系統(tǒng)下長度是?4字節(jié)
          ????//??????????????64??????64???????????????8
          ????char*********?p?=?NULL;
          ????int*?q?=?NULL;
          ????printf("%d,%d\n",?sizeof(p),?sizeof(q));//4?,?4
          ????return?0;
          }

          03_給類型起別名.c

          #define?_CRT_SECURE_NO_WARNINGS
          #include
          #include
          #include
          #include


          typedef?unsigned?int?u32;

          //typedef?和結(jié)構(gòu)體結(jié)合使用
          struct?Mystruct
          {

          ????int?a;
          ????int?b;
          };
          typedef?struct?Mystruct2
          {

          ????int?a;
          ????int?b;
          }TMP;

          /*
          void?無類型
          1.函數(shù)參數(shù)為空,定義函數(shù)時(shí)用void修飾???int?fun(void)
          2.函數(shù)沒有返回值:使用void ??????????? void fun (void)
          3.不能定義void類型的普通變量:void a;//err 無法確定是什么類型
          4.可以定義?void*?變量?void*?p;//ok???32位系統(tǒng)下永遠(yuǎn)是4字節(jié)
          5.數(shù)據(jù)類型本質(zhì):固定內(nèi)存塊大小別名
          6.void?*p萬能指針,函數(shù)返回值,函數(shù)參數(shù)

          */


          int?main()
          {
          ????u32?t;//unsigned?int

          ????//定義結(jié)構(gòu)體變量,一定要加上struct?關(guān)鍵字
          ????struct?Mystruct?m1;
          ????//Mystruct?m2;//err

          ????TMP?m3;//typedef配合結(jié)構(gòu)體使用
          ????struct?Mystruct2?m4;

          ????printf("\n");
          ????return?0;
          }

          04_變量的賦值.c

          #define?_CRT_SECURE_NO_WARNINGS
          #include
          #include
          #include
          #include



          int?main()
          {
          ????//變量本質(zhì):一段連續(xù)內(nèi)存空間別名
          ????//變量相當(dāng)于門牌號,內(nèi)存相當(dāng)于房間
          ????int?a;
          ????int*?p;

          ????//直接賦值
          ????a?=?10;

          ????printf("a=%d\n",?a);

          ????//間接賦值
          ????printf("&a:%d\n",?&a);
          ????p?=?&a;
          ????printf("p=%d\n",?p);
          ????*p?=?22;
          ????printf("*p=%d,a=%d\n",?*p,?a);

          ????return?0;
          }

          05_全局區(qū)分析.c

          #define?_CRT_SECURE_NO_WARNINGS
          #include
          #include
          #include
          #include



          int?main()
          {
          ????//變量本質(zhì):一段連續(xù)內(nèi)存空間別名
          ????//變量相當(dāng)于門牌號,內(nèi)存相當(dāng)于房間
          ????int?a;
          ????int*?p;

          ????//直接賦值
          ????a?=?10;

          ????printf("a=%d\n",?a);

          ????//間接賦值
          ????printf("&a:%d\n",?&a);
          ????p?=?&a;
          ????printf("p=%d\n",?p);
          ????*p?=?22;
          ????printf("*p=%d,a=%d\n",?*p,?a);

          ????return?0;
          }

          06_堆棧區(qū)分析.c

          #define?_CRT_SECURE_NO_WARNINGS
          #include
          #include
          #include
          #include


          char*?get_str()
          {
          ????char?str[]?=?"abcdef";//內(nèi)容分配在棧區(qū),函數(shù)運(yùn)行完畢后內(nèi)存釋放
          ????printf("%s\n",?str);

          ????return?str;
          }

          char*?get_str2()
          {
          ????char*?temp?=?(char*)malloc(100);
          ????if?(temp?==?NULL)
          ????{
          ????????return?NULL;
          ????}

          ????strcpy(temp,?"abcdefg");
          ????return?temp;
          }


          int?main()
          {
          ????char?buf[128]?=?{?0?};

          ????//strcpy(buf,get_str());
          ????//printf("buf?=?%s\n",?buf);//亂碼,不確定內(nèi)容

          ????char*?p?=?NULL;
          ????p?=?get_str2();
          ????if?(p?!=?NULL)
          ????{
          ????????printf("p=%s\n",?p);
          ????????free(p);
          ????????p?=?NULL;
          ????}
          ????return?0;
          }

          07_靜態(tài)局部變量.c

          #define?_CRT_SECURE_NO_WARNINGS
          #include
          #include
          #include
          #include

          int*?getA()
          {
          ????static?int?a?=?10;//在靜態(tài)區(qū),靜態(tài)區(qū)在全局區(qū)

          ????return?&a;
          }

          int?main()
          {
          ????int*?p?=?getA();
          ????*p?=?5;
          ????printf("%d\n",);

          ????return?0;
          }

          08_棧的生長方向.c

          #define?_CRT_SECURE_NO_WARNINGS
          #include
          #include
          #include
          #include

          int*?getA()
          {
          ????static?int?a?=?10;//在靜態(tài)區(qū),靜態(tài)區(qū)在全局區(qū)

          ????return?&a;
          }

          int?main()
          {
          ????int*?p?=?getA();
          ????*p?=?5;
          ????printf("%d\n",);

          ????return?0;
          }




          版權(quán)申明:內(nèi)容來源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無法確認(rèn),都會標(biāo)明作者及出處,如有侵權(quán),煩請告知,我們會立即刪除并致歉!

          瀏覽 65
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天操天天干天天舔 | 北条麻妃在线无码 | 韩国三级片在线视频 | 极度兴感美女黄色操逼视频 | 欧美熟妇乱伦视频 |