關於記憶體的知識:c++使用3種(c++11中是4種)不同的方案來儲存資料,這些方案的區別在於資料保留在記憶體中的時間。
1. 自動變數和棧
自動變數的數目隨函式的開始和結束而增減,因此程式必須在執行時對自動變數進行管理,常用的方法是留出一段記憶體,將其視為棧,以管理動態變數的增減。
2.靜態持續變數
和c語言一樣,c++也為靜態持續變數提供了3種鏈結性,外部鏈結性(可在其他檔案中訪問),內部鏈結性(只能在當前檔案中訪問),無鏈結性(只能在函式內部和**塊中訪問)。編譯器將分配固定的記憶體塊來儲存所有的靜態持續變數,這些變數在程式執行期間將一直存在。另外,如果沒有顯示的初始化靜態變數,編譯器將把它們設定為0。
下面是建立3種靜態持續變數的方式:
...
int main()
void f1(int n)
void f2(float m )
靜態持續變數的初始化過程:首先,所有的靜態變數都將被零初始化,而不管程式設計師是否顯示地初始化了它。接下來,如果使用常量表示式初始化了變數,且編譯器僅根據檔案內容(包括被包含的標頭檔案)就可計算表示式,編譯器將執行常量表示式初始化。必要時,編譯器將執行簡單計算。如果沒有足夠的資訊,變數將被動態初始化。 變數儲存持續性 作用域和鏈結性
靜態持續變數3種鏈結性 外部鏈結性 可在其他檔案中訪問 內部鏈結性 只能在當前檔案中訪問 無鏈結性 只能在當前函式或 中訪問 要想建立鏈結性為外部或內部的靜態持續變數,必須在 塊外面宣告它,要建立沒有鏈結性的靜態持續變數,必須在 塊內宣告它。1.單定義規則 變數只能有一次定義,c 提供了兩種變數宣告...
儲存持續性 作用域和鏈結性之二
除了執行緒儲存持續性,c 使用三種不同的方案來儲存資料,這些方案的區別就在於資料保留在記憶體中的時間。使用c 運算子new 或c函式malloc 分配的記憶體,被成為動態記憶體。動態記憶體由運算子new和delete控制,不是由作用域和鏈結性規則控制。因此,可以在乙個函式中動態分配記憶體,而在另乙個...
C 儲存持續性 作用域與鏈結性
簡介 c 使用三種 c 11之後是四種 不同的方案來儲存資料,這些方案的區別就在於資料保留在記憶體中的時間。詳解 自動儲存持續性 在函式定義中宣告的變數 包括原函式引數 的儲存持續性為自動的。它們在程式開始執行其所屬的函式或 塊時被建立,在執行完函式或 塊時,它們使用的記憶體被釋放。靜態儲存持續性 ...