1.儲存連續性
在c++中使用四種不同的方案來儲存資料2.靜態成員變數的記憶體分配
如果乙個類中有靜態成員(static),注意,不能在類的宣告中初始化靜態成員,這是因為宣告只是描述了如何分配記憶體,而並沒有分配記憶體,所以,對於靜態成員的初始化,需要在類的宣告之外進行所以,靜態成員在類的宣告中宣告,在包含類方法的檔案中初始化 ,初始化時應使用作用域運算子來指出靜態成員所屬的類
3.靜態持續變數的分類
int global = 1; //該自動變數為全域性變數,鏈結性為外部,可以在該程式的其他檔案中使用
static int a = 1; //該靜態變數的鏈結性為內部,只能在包含該**的檔案中使用
int main()
void func1()
這也就是為什麼,靜態變數即使沒有被執行,也會分配記憶體的原因,這是和區域性自動變數的乙個區別補充:全域性自動變數和全域性靜態變數的乙個最主要的區別就是:全域性變數可以跨檔案使用,而全域性靜態變數只能在該**的檔案中使用
(1)靜態持續性--外部鏈結性
鏈結性為外部的變數成為外部變數,他們的儲存持續性是靜態的,作用域為整個檔案,是在所有函式外部定義的,因此,外部變數也稱為全域性變數,這是相對於區域性自動變數而言的(2)靜態持續性--內部鏈結如何使用外部變數,c++規定,每個變數的定義只能有一次,所以提供了兩種變數的宣告
如果將作用域為整個檔案的變數變為靜態的,也就是內部鏈結的靜態變數,就不會與其他檔案中作用域為全域性的同名變數產生衝突(3) 靜態持續性--內部鏈結在**塊內部使用static限定符的變數,該變數只能在該**塊中使用,在兩次呼叫函式之間,靜態區域性變數的值不會發生變化,適合再生4.說明符與限定符(1)說明符:
(2)cv-限定符:const與volatile
(3)mutable即使結構或者變數為const,也可以被修改5.函式與鏈結性c++中規定,不允許在函式中定義另乙個函式,所以,所有函式的儲存持續性都是靜態的,也就是在程式的整個執行過程中都是存在的6.儲存方案與動態分配可以再函式前加上static進行限定,表明,該函式是只適用於所在的程式檔案的,是內部鏈結的,並且,可以在其他檔案中宣告同名函式,而不發生衝突
注意:對於所有的外部函式,只能定義一次,這是c++的單定義規則
在c++中,編譯器使用三塊記憶體來分別儲存變數這裡先討論動態記憶體的分配(1)靜態變數的儲存----靜態儲存區
(2)自動變數的儲存----棧
(3)動態記憶體分配(malloc/new)-----堆
7.命名空間
命名空間簡單的講就是為了防止名稱發生衝突的namespace jill
}namespace jack
}
此時,上面兩個命名空間中的a與函式pola不會發生衝突,可以使用作用域解析運算子::來限定其名稱C 記憶體模型與命名空間
hpp檔案與.h檔案都是header檔案,但是.hpp檔案中包含了函式實現,減少了需要編譯的.cpp檔案數量。在ide中,不要將標頭檔案加入到專案列表中,只需源 標頭檔案由 include指令管理。為什麼.hpp中包括模板函式的實現,當該.hpp檔案被多個cpp用 include包含,鏈結時不會出現...
c 記憶體模型和命名空間
一 標頭檔案 1.c 程式一般分為3部分 標頭檔案 實現標頭檔案的原始檔 呼叫函式的原始檔 2.標頭檔案常包含的內容 1 函式原型 2 使用 define或者const定義的符號常量 被宣告為const的資料具有特殊的鏈結屬性 外部 內部 無 具備的鏈結性為內部,其作用域為包含標頭檔案的當前原始檔 ...
記憶體模型和命名空間
編譯器將分配固定的記憶體塊來儲存所有的靜態變數,這些變數在整個程式執行過程中一直存在。另外,如果沒有顯示的初始化靜態變數,編譯器將把它設為0,在預設情況下,靜態陣列和結構將每個元素或成員變數的所有位都設定為0 定義方式 1 外 必須在 塊的外面宣告它,可使用external修飾也可省略 2 內 必須...