鏈結性分為外部、內部、無鏈結性
無連線性:不能共享,只能在區域性**塊使用
1、自動儲存持續性:
在函式中定義的變數儲存持續性為自動,在程式
開始呼叫其所屬函式開始被建立,呼叫完畢被銷毀,
在c++中有2種變數儲存持續性為自動。
2、靜態儲存持續性:
在函式定義外定義的變數和使用用關鍵字static定義的
變數儲存持續性為靜態。它們在整個程式執行過程中
都一直存在c++中有3種儲存持續性為靜態的變數;
3、執行緒儲存持續性(c++11):如果是用關鍵字
thread_local宣告的變數,其生命週期與所屬執行緒
一樣長。
4、動態儲存持續性:用new運算子分配空間後一直存在
直到呼叫delete函式之後被銷毀。
儲存描述
持續性鏈結性
作用域宣告方式
自動自動
無**塊
在**塊中或者函式引數
暫存器自動
無**塊
在**塊中用關鍵字register
靜態無鏈結性靜態無
**塊在**塊中用關鍵字static
靜態外鏈連
靜態外鏈結
外部在函式外
靜態內鏈結
靜態內鏈結
內部在函式外部用static
注:[1] register在c++11標註以前是用來宣告暫存器變數的,用
register宣告的變數會被儲存在cpu暫存器內,加快訪問速度,
對於某些訪問量高的變數來說很適合。但是在c++11標準以後
register知識用來顯示的指出變數是自動的,現在的編譯器已經能
對使用頻繁的變數做特殊處理了。
[2] auto,在c++11標註以前,auto關鍵字是用來顯示的指出
某個變數為自動變數,和現在的現在的register和以前的auto
作用是一樣的。但是在c++11標準以後auto被用來自動判斷
變數的型別。
[3] static,在**塊中使用static關鍵字宣告的變數儲存持續性
為靜態。在函式外用static關鍵字宣告的變數鏈結性為內部。
單定義規則:
該規則指出,變數只能定義一次,為了滿足這種需求,c++
提供了兩種變數的宣告方式。一種是定義宣告,簡稱為定義,
例如:int a,他會給變數分配記憶體空間。另一種是引用宣告
,簡稱宣告,例如:extern int a,它不會給變數分配記憶體空間
,只是告訴編譯器有這麼乙個變數,且這是乙個外部變數。
靜態儲存 動態儲存 靜態變數與動態變數
動態變數 int a 靜態變數 static int a 靜態變數,全域性動態變數都是靜態儲存,儲存在全域性資料區,在變數定義時就分定儲存單元並一直保持不變,直至整個程式結束。靜態儲存變數是一直存在的,只會初始化一次。區域性動態變數是動態儲存,動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,...
C 靜態變數及其鏈結性
承接c 生存期 作用域和鏈結性 唯一定義規則 one defination rule,簡稱odr 規定每個變數只能有乙個定義。而每個需要使用外部變數 有外部鏈結性 的檔案都必須宣告該變數。為了滿足這些需要,c 有兩種變數宣告 定義宣告 defining declaration,簡稱定義definit...
靜態變數 自動變數與暫存器變數的儲存
變數的儲存位置與變數的型別有關,這裡變數的型別不是int float之類的型別,而是分為三類 靜態變數 自動變數和暫存器變數。然而,變數到底屬於這三類中的哪一類是根據變數在原始檔中的宣告位置和宣告方式所決定的。變數的儲存型別 storage class 是指儲存變數值的記憶體型別。變數的儲存型別決定...