c語言分為4個儲存區域:
**區靜態儲存區
棧區堆區
**區:存放編譯後的可執行**的區域。
靜態儲存區:儲存著靜態變數(static修飾的變數 如:static int a; ) 和一些常量(如 char *p="abcd"; 其中的「abcd」就是儲存在靜態儲存區的 並且被認為是唯讀的)以及全域性變數
,全域性變數和靜態變數在分配記憶體時會被初始化器初始化為型別0。
棧區:存放函式的形參和區域性變數(包括復合型別的區域性變數) 例如在main函式中定義乙個int a; 編譯器就會在棧區分配4個位元組給a。
堆區:c語言中用malloc realloc calloc 函式分配的動態記憶體都在堆區,如 char *p=(char*)malloc(10); 則p為指標,是乙個區域性變數,在棧區。p所指向的位址為堆區動態分配的空間,堆區由作業系統進行管理(可以認為有乙個空閒記憶體分配表)
舉例:static int a; //a是靜態變數其空間在靜態儲存區,佔4個位元組
int main()
int b; //b是乙個區域性變數,分配在棧區,本函式結束後被銷毀。
char *p1="abcd" /*p1是乙個區域性變數 在棧區分配,佔4個位元組(32位系統下),其值為乙個位址,它指向靜態儲存區的乙個常量字串的首位址,該字串長度5位 分別是 'a' 'b' 'c' 'd' 'e' '\0' */
int * p2=(int*)malloc(sizeof(int)*10); /*p是乙個區域性變數,在棧區分配4個位元組(同上),它指向堆區的乙個長度為10個int型大小的空間的首位址 */
return 0;
c語言儲存區 堆疊靜態儲存區
棧 由編譯器自動分配釋放,其中存放在主調函式中被呼叫函式的下一句 函式引數和區域性變數,容量有限 堆由程式設計師自己分配釋放 用malloc和free,或new和delete 如果我們不手動釋放,那就要到程式結束才釋放。如果對分配的空間在不用的時候不釋放而一味的分配,那麼可能會引起記憶體洩漏,其容量...
C 資料儲存區
段 也稱文字段 用來存放程式執行 的記憶體區。這部分區域的大小在程式執行前就已經確定,並且記憶體區域通常屬於唯讀,某些架構也允許 段為可寫,即允許修改程式。在 段中,也有可能包含一些唯讀的常數變數,例如字串常量等。棧 stack 就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的儲存區...
C的儲存區
1 概述 在c中一般分為這幾個儲存區 1 段區域 code segment 放置程式 的區域,沒有什麼好多說的 2 常量區域 放置程式中的常量,如以const作為字首定義的,中形如 abcdef 的字串,該區域內存在程式結束時釋放 3 初始化的全域性 靜態區域 全域性變數和靜態變數的儲存是放在一塊的...