儲存期:
靜態儲存期分配的內存在程式執行期間一直存在
執行緒儲存期分配的記憶體從執行緒生成到執行緒結束之前一直存在
自動儲存期物件一般在塊裡面,當程式進入這個塊時分配記憶體,退出這個塊時就釋放記憶體
動態儲存期手動分配記憶體和釋放記憶體(malloc,calloc)
檔案作用域(全域性)
塊作用域可見範圍在塊內
函式作用域僅用於goto標籤
函式原型作用域函式原型的形參定義到結束,所以定義函式原型時,形參名編譯器不關心,只要型別準確就行。
外部鏈結就是該物件在別的檔案裡也能被訪問到
內部鏈結就是該物件只能在同乙個檔案裡才能被訪問到
無鏈結一般在塊裡,只能在塊裡才能被訪問到
我們從例子中來解釋
//具有靜態儲存期,檔案作用域,外部鏈結
char *name = "滄浪水";
//具有靜態儲存期,檔案作用域,內部鏈結
static char *url = "";
#include //由於在別的檔案宣告了name為靜態儲存期,檔案作用域,外部鏈結
//所以我們在這裡可以直接拿來用
//extern就是用來表明該變數來自外部檔案
extern char *name;
//由於在別的檔案宣告了name為靜態儲存期,檔案作用域,內部鏈結
//在這裡訪問不到,所以下面語句無效
//extern char *url;
//不會產生命名衝突
char *url = "";
int main()
gcc main.c a.c
./a.out #滄浪水
靜態儲存類別內存在編譯的時候就已經確定,該類別的變數在程式開始的時候被建立,程式結束時被銷毀。
自動儲存類別內存在進入塊時建立,離開塊時銷毀,記憶體數量會相應的增加和減少,這部分記憶體通常作為棧來處理,按順序建立,按相反的順序銷毀。
動態分配的內存在呼叫malloc()或相關函式時建立,在呼叫free()時銷毀,由程式設計師管理,記憶體會相對凌亂,速度通常也會比棧記憶體要慢。
靜態資料(包括字串字面量)存在乙個記憶體區域,自動資料會存放在記憶體另乙個區域(棧),動態分配的記憶體會存放在第3個區域(通常稱為堆或自由記憶體)
作用域 鏈結 儲存期
作用域,分四種 1.塊作用域 block scope 2.函式作用域 function scope 僅限於goto的標籤 3.函式原型作用域 function prototype scope 3.檔案作用域 file scope 在函式和類之外的說明的識別符號具有檔案作用域,其作用域從說明點開始,在...
C 作用域 儲存期 鏈結
c語言 作用域 儲存期 鏈結屬性 作用域和鏈結描述了識別符號的可見性,作用域描述了這些識別符號的作用範圍,儲存期描述了通過這些識別符號訪問的物件的生存期。1 作用域 塊作用域 用 闊起來的,從宣告開始到 結束 函式作用域 goto 識別符號 的作用域為整個函式。函式原型作用域 函式宣告開始,函式宣告...
C語言 作用域 儲存期 鏈結
作用域描述程式中可訪問識別符號的區域。乙個c變數的作用域可以是塊作用域 函式作用域 函式原型作用域或檔案作用域。翻譯單元和檔案 通常認為的多個檔案在編譯器中可能以乙個檔案出現。例如,通常在源 c副檔名 中包含乙個或多個標頭檔案 h 副檔名 標頭檔案會依次包含其他標頭檔案,所以會包含多個單獨的物理檔案...