C 儲存類 鏈結 記憶體管理

2021-07-12 07:27:46 字數 1340 閱讀 9817

用於儲存程式資料的記憶體可用儲存時期/作用域/鏈結來表徵。儲存時期可以是靜態的/自動的/或是分配的。

如果是靜態的,內存在程式開始執行時被分配,並在程式執行時一直存在。

如果是自動的,變數所用內在程式執行到該變數定義所在**塊時才開始分配,退出**塊時釋放。

如果是分配的記憶體,記憶體通過呼叫malloc()分配,通過呼叫函式free()釋放。

作用域決定了那一部分程式訪問某個資料。在所有函式之外定義的變數具有檔案作用域,並對該變數宣告之後定義的全部函式可見。

在**塊或者作為函式參量定義的變數具有**塊作用於,並只有該**塊及其子**塊中可見。

鏈結描述了程式的某個單元定義的變數可被鏈結到其他哪些地方。

具有**塊作用於的變數作為區域性變數,具有空鏈結。

具有檔案作用域的變數可有內部鏈結或外部鏈結。內部鏈結意味著變數只可在包含變數定義的檔案內部使用。外部鏈結意味著變臉也可以在其他檔案中使用。

自動---在乙個**塊內宣告的變數,無論有沒有儲存類修飾符auto,都資料自動儲存類。該類具有自動儲存時期/**塊作用域/空鏈結。如未經初始化,它的值是不定的。

暫存器--在乙個**塊內使用儲存類修飾符register宣告的變數資料暫存器儲存類。該類具有自動儲存時期/**塊作用域和空鏈結,並且您無法獲得其位址。把乙個變數宣告為暫存器變數可以指示編譯器提供可用的最快訪問。如未經初始化,他的值是不定的。

靜態/空鏈結-在乙個**塊內使用儲存類修飾符static宣告的變數資料靜態空鏈結儲存類。該類具有靜態儲存時期/**塊作用域和空鏈結,僅在編譯時初始化一次。如未明確初始化,它的位元組都被設定為0.

靜態/外部鏈結-在所有函式外部定義/未使用儲存類修飾符static宣告的變數資料靜態鏈結儲存類。該類具有靜態儲存時期/檔案作用域和外部鏈結,僅在編譯時初始化一次。如未明確初始化,它的位元組都被設定為0.

靜態/內部鏈結-在所有函式外部定義/使用儲存類修飾符static的變數資料靜態/內部鏈結儲存類。該類具有靜態儲存時期/檔案作用域和內部鏈結,僅在編譯時初始化一次。如未明確初始化,它的位元組都被設定為0.

分配記憶體是使用函式malloc()提供的記憶體,該函式返回乙個指定具有所請求位元組數的記憶體塊位址。將這一塊記憶體的位址作為引數來呼叫函式free(),可以使該記憶體塊重新可用。

型別限定詞說明附有const/volatile/restrict。

說明符const將資料限定為不變的。在使用指標時,const可以表明指標本身不變或指標指向的資料不變,這取決於const在宣告中的位置。

說明符volatile表明資料除了可被程式修改外還可通過其他方式修改,其目的是警示編譯器在優化時不要做出相反的假設。

說明符restrict也是為了優化而設定。由restrict限定的指標被認為是提供了對其所指向的資料塊的唯一訪問途徑。

儲存類,鏈結和記憶體管理

一,儲存類 不同的儲存類提供了變數的作用域,鏈結以及儲存時期的不同組合。儲存時期,作用域,鏈結 儲存時期 變數在記憶體中保留的時間。函式原型作用域從變數定義處一直到原型宣告的末尾。這說明編譯器在處理乙個函式的引數時,它所關心的只是該引數的型別。乙個在所有函式之外定義的變數具有檔案作用域。二,鏈結 關...

儲存類 鏈結和記憶體管理

作用域 鏈結乙個 變數具有下列鏈結之一 外部鏈結 內部鏈結或空鏈結。具有 塊作用域或者函式原型作用域的變數有空鏈結,意味著它們是由其定義所在的 塊或者函式原型所私有的。具有檔案作用域的變數可能有內部或者外部鏈結。乙個具有外部鏈結的變數可以在乙個多檔案程式的任何地方使用。乙個具有內部鏈結的變數可以在乙...

儲存類 鏈結和記憶體管理

malloc calloc free ansi 型別限定符 冪等作用域描述了程式中可以訪問乙個識別符號的乙個或多個區域 函式作用域 函式原型作用域 從形參定義到原型宣告結束 檔案作用域 具有檔案作用域的變數可能有外部或者內部鏈結 預設是外部函式 可以被其它檔案訪問 只能用於所定義的檔案 定義在標頭檔...