<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語(yǔ)言中內(nèi)存四區(qū)的本質(zhì)分析

          共 3831字,需瀏覽 8分鐘

           ·

          2022-02-11 08:05

          素材來(lái)源 | 抖點(diǎn)料er


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

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

          ●“類(lèi)型”是對(duì)數(shù)據(jù)的抽象
          ●類(lèi)型相同的數(shù)據(jù)有相同的表示形式、存儲(chǔ)格式以及相關(guān)的操作
          ●程序中使用的所有數(shù)據(jù)都必定屬于某一種數(shù)據(jù)類(lèi)型

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

          ●數(shù)據(jù)類(lèi)型可理解為創(chuàng)建變量的模具:是固定內(nèi)存大小的別名。
          ●數(shù)據(jù)類(lèi)型的作用:編譯器預(yù)算對(duì)象(變量)分配的內(nèi)存空間大小。
          ●注意:數(shù)據(jù)類(lèi)型只是模具,編譯器并沒(méi)有分酤空間,只有根據(jù)類(lèi)型(模具)
          創(chuàng)建變量(實(shí)物),編譯器才會(huì)分配空間。

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

          1.2.1變量的概念

          概念:既能讀又能寫(xiě)的內(nèi)存對(duì)象,稱(chēng)為變量;若一旦初始化后不能修改的對(duì)象則稱(chēng)為常量。
          變量定義形式:類(lèi)型標(biāo)識(shí)符,標(biāo)識(shí)符,…,標(biāo)識(shí)符;

          1.2.2變量的本質(zhì)

          1、程序通過(guò)變量來(lái)申請(qǐng)和命名內(nèi)存空間int a = 0。
          2、通過(guò)變量名訪(fǎng)問(wèn)內(nèi)存空間。

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

          流程說(shuō)明
          1、操作系統(tǒng)把物理硬盤(pán)代碼load到內(nèi)存
          2、操作系統(tǒng)把c代碼分成四個(gè)區(qū)
          棧區(qū)( stack):由編譯器自動(dòng)分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等
          堆區(qū)(heap):一般由程序員分配釋放(動(dòng)態(tài)內(nèi)存申請(qǐng)與釋放),若程序員不釋放程序結(jié)束時(shí)可能由操作系統(tǒng)回收
          全局區(qū)(靜態(tài)區(qū))( statIc):全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域,該區(qū)域在程序結(jié)束后由操作系統(tǒng)釋放
          常量區(qū):字符串常量和其他常量的存儲(chǔ)位置,程序結(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棧的生長(zhǎng)方向和內(nèi)存存放方向


          相關(guān)代碼:
          02_數(shù)據(jù)類(lèi)型本質(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é)

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

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

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

          //b,&b數(shù)組類(lèi)型不同
          //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);//不同


          //指針類(lèi)型長(zhǎng)度,32位機(jī)器32位系統(tǒng)下長(zhǎ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_給類(lèi)型起別名.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 無(wú)類(lèi)型
          1.函數(shù)參數(shù)為空,定義函數(shù)時(shí)用void修飾 int fun(void)
          2.函數(shù)沒(méi)有返回值:使用void void fun (void)
          3.不能定義void類(lèi)型的普通變量:void a;//err 無(wú)法確定是什么類(lèi)型
          4.可以定義 void* 變量 void* p;//ok 32位系統(tǒng)下永遠(yuǎn)是4字節(jié)
          5.數(shù)據(jù)類(lèi)型本質(zhì):固定內(nèi)存塊大小別名
          6.void *p萬(wàn)能指針,函數(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)于門(mén)牌號(hào),內(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)于門(mén)牌號(hào),內(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_棧的生長(zhǎng)方向.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)容來(lái)源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無(wú)法確認(rèn),我們都會(huì)標(biāo)明作者及出處,如有侵權(quán)煩請(qǐng)告知,我們會(huì)立即刪除并表示歉意。謝謝!



          瀏覽 133
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  一本色道久久88综合精品看片 | 999热视频 | 你懂的网址在线观看 | 凹凸精品一区二区三区四区在线 | 日韩高清无码网站 |