C C 之基礎學習筆記

2021-07-16 07:28:39 字數 2539 閱讀 7499

1.空類、建構函式、成員函式都是不占用空間的,都是乙個size為1,作為類的佔位符,如何區分類

2.如果乙個類含有虛函式,那麼他的size將會是8(x64位)

2.1 virtual大小是否與系統平台相關?x64和x86

2.2 vptr和vtable的原理和資料結構如何?

3.建構函式的順序

>>先基類的構造再子類(b -> subb)

4.析構函式的順序

>>先子類再基類

5.析構函式為何必須為虛函式?

6.哪些函式可以被宣告為虛函式?

inline static 成員 構造 拷貝

7.記憶體洩露時如何定位和排查?

8.程序優先順序設計?

9.執行緒優先順序設計?

10.程序和執行緒的選擇原則是何種?

11.stl的堆排序

12.stl的swap意義

13.stl的bind的應用

14.stl實現偏特性

15.gcc/g++的編譯連線的引數,連線順序

16.c++的多型性是依據於虛函式進行實現的

17.c++的繼承是依賴於什麼實現的?

18.計算物件的sizeof()

>>class b,結果sizeof為16,說明x64的位址分布為8位元組

>>虛函式為8,下面int為4,結果對齊之後為16位元組

>>struct //大小仍舊只有1個位元組,不會去位元組對齊

>>x64上(int-4,long-8,vtable-8,指標的size為8)

>>最大的頻寬按照指定的最大的瓶頸進行計算

19.#pragma pack()取消對齊

#pragma pack(n)設定對齊位元組,一般而言是要求為2的指數(否則失效)

>>#pragma pack(1)表示緊湊型的資料結構的設計,可以只針對某些資料結構進行設計,

採用以上巨集進行括號指定即可

>>請記住一點,當pack的值比現有的int a,char b等要大,此時只按照現有記憶體結構來判定而已而非pack的最大值

>>pack只是限定乙個對齊的尺度,如果基本尺度都沒有超過的時候那麼問題就來啦

20.printf()操作時,後者值比格式化的要多的時候,不會報錯,只會一一對應而已

21.typedef 定義的指標只是說明指標的偏移尺度而已,只要不去指定沒有多大的問題

22.格式化的要點

>>%x 16進製制

>>位址的偏移尺度是根據指向的資料而來的,如果是char則為1,否則為int(4),struct也是如此

23.b buf[3];//則需要執行3次析構函式

24.多型技術(泛型技術-模板、rtti、虛函式技術)

25.虛函式表的原理

>>基類和子類都擁有虛函式表指標(準確的說是指標)

>>虛函式通過vtable進行實現,儲存的是乙個類的虛函式的位址表

這張表解決了繼承、覆蓋、

26.class base

virtual void funa()

virtual void funb()

};base b;//類例項的首個位址

(fun)*((int*)*(int*)(&b)+1);//第二個虛函式 

(fun)*((int*)*(int*)(&b)+2); //第三個虛函式

27.c++的類的記憶體結構分布圖

>>採用vs除錯檢視乙個類例項的記憶體結構分布圖

28.c++物件的記憶體布局

person p1;//乙個int id,age;乙個成員函式

int *p = (int*)&p1;

*p => person.id

++p;

*p => person.age

①非靜態成員變數存放於物件之類,存放順序與定義的順序一致

②成員函式時存放於例項物件之外,sizeof()可以知曉

③靜態變數存放於類的物件之外,staitc函式也存放於類的物件之外

person::scount 和 person::personcount()

④虛函式virtual則

vptr -> a | b | c

idage

⑤單個類繼承模型:vptr,base類非static成員,子類中非static成員

⑥多繼承:base1的vptr,base1的成員,base2的vptr,base2的成員,子類的成員

類為每個虛函式產生乙個指標,存放於vtable之中

每個類物件會被安插乙個vptr指標,指向該類的虛函式表,所以需要考慮到他的記憶體模型

其中類的vptr指標的設定、復位都是被構造/析構/賦值等操作符進行執行時切換

29.編譯的流程和模型

30.c++的記憶體模型

31.c的記憶體模型

32.tcp的包的模型

33.usb的包的模型

34.http的包的模型

35.rtsp的包的模型

36.udp的包的模型

37.libevent/ace等網路模型

38.ppp的包模型

39.程序的記憶體模型

40.執行緒的記憶體模型

41.核心態與使用者態的切換與工作模型

C C 基礎學習筆記

1.計算機記憶體分為乙個個的儲存單元,即乙個位元組 8bit二進位制 整數要儲存符號位,實數要儲存符號位 小數點1 32位字長計算機 3.a z 65 90 a z 97 122 ascii 4.一般不比較浮點數數值的相等和不相等性 指向二維陣列的指標變數int pf 2 3 分別有兩個pf 0 p...

C C 學習筆記 基礎知識3

1 和 和 有什麼區別 1 和 對運算元進行求值運算,和 只是判斷邏輯關係。2 和 在在判斷左側運算元就能確定結果的情況下就不再對右側運算元求值。注意 在程式設計的時候有些時候將 或 替換成 或 沒有出錯,但是其邏輯是錯誤的,可能會導致不可預想的後果 比如當兩個運算元乙個是 1 另乙個是 2 時 2...

C C 學習筆記 基礎知識6

1複雜表示式與序列點 序列點是乙個時間點 在整個表示式全部計算完畢之後或在 或逗號運算子處,或在函式呼叫之前 此刻塵埃落定,所有的 都已確保結束.ansi iso c 標準這樣描述 在上乙個和下乙個序列點之間,乙個物件所儲存的值至多只能被表示式的計算修改一次。而且前乙個值只能用於決定將要儲存的值。i...