一、
1.標頭檔案中內容:函式原型、#define與const常量、結構宣告、類宣告、模板宣告、內聯函式
2.防止重複定義,防止二次包含,#ifndef #endif
3.多個庫鏈結,兩個編譯器可能為同乙個函式生成不同修飾名稱,最好是同乙個編譯器編譯生成的庫。
二、儲存持續性、作用域和鏈結性
1.儲存資料方案:自動儲存,靜態儲存static,執行緒儲存thread_local,動態儲存new,存放於heap堆。
2.作用域,名稱在檔案的多大範圍可見;鏈結性,描述了名稱如何在不同單元間共享。
3.auto用於c++,自動型別推斷。c語言為自動作用域。
4.棧,記憶體儲存方向為,自下向上增長
5.register暫存器變數,訪問速度較快。
6.static變數,外部鏈結性:全域性,內部鏈結性:檔案內部static,無鏈結性:函式內部。未初始化的靜態變數為0。
7.constexpr建立常量表示式的方式
8.靜態持續性,外部鏈結性,(1)使用::訪問全域性變數。例如區域性定義了warming,全域性也定義了warming,可使用::warming訪問全域性。其他情況,區域性會覆蓋全域性。(2)extern宣告訪問,單一定義原則。
9.volatile去除編譯器優化,編譯器將值儲存至暫存器中,volatile每次從記憶體中取值。
10.mutable,即使結構或類的為const,某個成員也可能被修改。
11.const修改全域性變數的鏈結性為內部,相當於static。其他檔案呼叫需加extern,但是每個檔案有同一組常量,是屬於自己的。
12.extern const int states = 50;預設加const,修改常量的鏈結性為內部,但可用extern覆蓋,此時其他檔案共享常量。
13.函式鏈結性:單定義規則,用於非內聯函式。內聯函式可防在標頭檔案中,包含了標頭檔案的每個檔案都有乙份內聯函式的定義。
14.語言鏈結性:
(1)c++將函式翻譯時,執行名稱矯正或名稱修飾。c只是翻譯。
extern 「c」 void
spiff
(int);
//c語言方式
extern
void
spiff
(int);
//隱式c++
extern 「c」 void
spiff
(int);
//顯式c++
15.動態儲存
(1)new失敗時不會返回空指標,引發異常std::bad_alloc
(2)原型
void
*operator
new(std::size_t)
;void
*operator
new[
](std::size_t)
;
(3)定位new運算子
a、預設從heap上分配,也可指定地點申請滿足大小的記憶體塊。
b、例1為常規,例2為buffer中申請int,例3為buffer中申請40個int。
int
*p1 =
newint
;//new(sizeof(int))
int*p2 =
new(buffer)
int;
//new(sizeof(int), buffer)
int*p3 =
new(buffer)
int[40]
;//new(40*sizeof(int), buffer),都為接收2個引數。
c、delete只可刪除常規申請的記憶體,對於定位new,不可刪除,會段錯誤。
三、命名空間
1.宣告區域 > 潛在作用域,潛在作用域可能會被區域性變數覆蓋。
2.命名空間特性,開放的,後續可追加。
3.不可位於**塊中,通過作用域解析運算子::訪問。
4.using 編譯指令和using宣告。宣告可使乙個變數可用,編譯指令使得所有名稱都可用。
編譯指令,增加了名稱衝突的可能性。
using jill::fetch;
//覆蓋區域性變數
using
namespace jill;
//使用所有名稱
5.採用編譯指令包含整個命名空間後,可定義區域性變數,全域性變數,訪問命名空間變數。分別採用,區域性,::全域性,命名空間::變數的形式。
6.作用域不同,覆蓋的範圍不同。
(1)使用using宣告將命名空間的名稱匯入宣告區域,報錯。
(2)使用using編譯指令將命名空間的名稱匯入宣告區域,區域性版本將隱藏命名空間版本。
7.(1)巢狀使用命名空間(2)open是可傳遞的(3)建立別名,namespace a = b;簡化對巢狀命名空間的呼叫。(4)未命名的命名空間,僅可在宣告點到該宣告區域結尾。不可使用using呼叫,不可在其他檔案中呼叫。
8.using宣告匯入函式名,不需要描述返回型別和特徵標。如果函式被過載,全部匯入。
9.盡可能少的使用using編譯,盡可能多的使用命名空間。
c primer 第九章 記憶體模型和命名空間
一,單獨編譯 1 請不要將函式定義或變數宣告放到標頭檔案中。原因 乙個標頭檔案中包含乙個函式定義,然後其他兩個檔案 同屬於乙個程式 包含該標頭檔案,則同乙個程式中將包含同乙個函式定義。除非函式是內聯的 inline 否則將出錯。2 將結構放在標頭檔案中是可以的。因為它們不建立變數。3 標頭檔案寫法 ...
第九章 虛擬記憶體
計算機的主存被組織成乙個由m個連續的位元組大小的單元組成的陣列。每個位元組都有乙個唯一的實體地址 pa 第乙個位元組位址為0,接下來為1,再接下來為2,依次類推。cpu訪問記憶體的最自然方式就是使用實體地址。我們把這種方式稱為物理定址。如圖所示。現代處理器使用一種稱為虛擬位址的定址方式。使用虛擬定址...
第九章(筆記)
轉移指令是可以修改ip,或同時修改cs和ip的指令 offset 是用於提取標號偏移位址的操作符 jmp在第2章裡說到時用於修改ip或同時修改cs和ip的轉移指令,這章裡單獨的jmp指令是乙個無條件的轉移指令 jmp short 標號 是實現段內短轉移 jmp near ptr 標號 是實現段內近轉...