變量的生命周期是怎么管理的?
一 內存四區
C/C++程序占用的內存分為四個區: 棧區,堆區,數據區,代碼區。
1 棧區
存放函數的參數值,局部變量的值等。如 int a; int *p; 這兒的a和p都存放在棧中。
由編譯器自動分配釋放。
2 堆區
存放由程序員動態申請的變量。(malloc, new等)
由程序員手動分配/釋放。若程序員不釋放,程序結束時可能由操作系統回收。
3 數據區 (包含常量區和全局區)
①常量區:存放常量。 包含字符串常量和其他常量。 char *p = "I love u"; 指針p指向的這塊內存屬於常量區。
②全局區/靜態區:存放全局變量和靜態變量。初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。
數據區在程序結束后由操作系統釋放
4 代碼區
存放程序的二進制代碼。
int a; //申請棧區內存
a = 4; //指向的代碼,放在代碼區。
二 內存四區的建立流程
1 雙擊運行程序時,操作系統把硬盤上的程序load到內存。
2 操作系統把c代碼分成四個區。
3 操作系統找到入口函數main,開始執行。流程圖如下: