C語言內(nèi)存分配(重)

內(nèi)存分配的類型:

靜態(tài)內(nèi)存分配:

全局變量、靜態(tài)全局變量、靜態(tài)局部變量; 靜態(tài)內(nèi)存分配是在程序編譯時分配的內(nèi)存空間

  • 全局變量

    #include <stdio.h>
    int a;
    int main()
    {
      printf("%d\n");
      return 0;
    }
    

在函數(shù)和代碼塊外部定義的變量是全局變量

定義一個全局變量時,變量在程序編譯時就分配內(nèi)存空間。全局變量可以在其他文件中訪問時要加上extern 關(guān)鍵字。在一處值發(fā)生改變其他文件中在使用時就會發(fā)生改變

  • 靜態(tài)全局變量

在變量類型前加static

   #include<stdio.h>
   static double hp = 100;
   int main ()
   {
      printf("%d\n", hp);
      return 0;
   }

靜態(tài)全集變量只能在當前文件的所有函數(shù)中被使用,其他文件中沒法使用。但可以定義一個名字相同的變量

  • 靜態(tài)局部變量

在局部變量前加static 關(guān)鍵字,靜態(tài)局部變量的生命周期是從聲明到程序結(jié)束的

動態(tài)內(nèi)存分配:

局部變量:棧和堆;變量在程序運行時分配內(nèi)存

棧的特點是:先進后出。
棧內(nèi)存空間由計算機自動分配和回收。生命周期在函數(shù)塊內(nèi)部,函數(shù)塊執(zhí)行結(jié)束,這塊內(nèi)存就自由了,可以讓其他變量訪問(內(nèi)存里的內(nèi)容在其它變量調(diào)用之前不會改變。

堆空間是由程序員手動開辟的內(nèi)存空間。程序員不釋放這塊空間,它就不能讓其他變量訪問。
堆空間分配的變量沒有變量名,只能通過指針間接訪問堆空間里的內(nèi)容。

靜態(tài)存儲區(qū)

變量前面加static聲明后,這塊空間就被計算機分配到靜態(tài)存儲區(qū)中,生命周期是從聲明到程序退出。
static 聲明的變量在程序編譯時就分配空間。

例:如何釋放函數(shù)里面的malloc申請的堆空間

#include <stdio.h>
#include <stdlib.h>
int *a = NULL;
int *add()
{

   a = (int *)malloc(sizeof(int));
   *a = 8;
   return a;
}
int main(int argc, const char * argv[])
{
   add();
   printf("%d\n", *a);
   free(a);
   return 0;
}

int *p = (int *)malloc(sizeof(int));//因為malloc 返回值是void *,需要進行類型轉(zhuǎn)化,才能把值賦值給其他指針變量

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容