變數可能存放在三個位置:普通記憶體(靜態儲存區)、程式執行堆疊、硬體暫存器。
在函式體外定義的和在函式體內定義的並宣告為static型別的儲存在靜態儲存區中,在程式執行之前建立,在程式退出後銷毀。
在函式體內定義的預設為(auto)自動變數,儲存在堆疊中,函式返回後,這些變數被銷毀。
關鍵字register可將自動變數宣告為暫存器變數,暫存器變數因儲存在暫存器中而得到更高的執行效率,但是暫存器空間有限,太多宣告為暫存器變數時,只取前幾個實際儲存在暫存器中,其餘仍然是普通的自動變數,另外,這種宣告還取決於編譯器,有些編譯器提供自己得暫存器優化方案。它的建立和銷毀時間同自動變數。但是在建立和銷毀時需要額外做一些操作。
C C 中變數的儲存位置
1 首先,講下 堆 heap 和 棧 stack 的區別 乙個由 c c 編譯過的程式占用的記憶體分為一下幾個部分 1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。這個棧的操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,...
C C 中變數的作用域和儲存型別簡介
寫在開頭 對於很多c c 的初學者來說,很容易理不清變數的作用域和儲存型別這一塊的一些概念,也容易將其中的一些概念搞混淆。作為乙個c c 的初學者,筆者希望在這裡能夠嘗試著去理一理這些較為繁雜的概念,主要當作自己備忘之用。當然,由於筆者水平有限,經驗不足,在這裡也只能羅列一些常用概念和使用方法,且可...
c c 變數儲存
1 靜態儲存區,是在程式編譯時就已經分配好的,在整個執行期間都存在,如全域性變數 常量。2 棧上分配,函式內的區域性變數就是從這分配的,但分配的記憶體容易有限。3 堆上分配,也稱動態分配,如我們用new,malloc分配記憶體,用delete,free來釋放的記憶體。static全域性變數與普通的全...