1.常規
char str1 = 「hello」 ;
char str2[5] = ;
char str3[6] = ;
char *p1 = "hello";
char *p2=;
int n = 10;
int *q = &n;
sizeof (str1 ) = 6 (自動加了'/0')
strlen (str1 ) = 5 (字串的長度)
sizeof (str2 ) = 5 (字元陣列的大小)
strlen (str2) = 未知 (該字串缺少結束符'/0')
sizeof (str3) = 6 (字元陣列的大小)
strlen (str3) = 5 (該字串的長度為5)
sizeof ( p1 ) = 4 (p1是乙個指標,大小為4)
sizeof ( p2 ) = 8 (p2是長度為2的字串陣列)
sizeof ( n ) = 4 (整型大小為4)
sizeof ( q ) = 4 (q是乙個指標,大小為4)
2.動態分配記憶體
int *p = (int *)malloc( 100 );
sizeof ( p ) = 4 (p是乙個指標,大小為4)
3.函式引數
void function1( char p,int num )
void function2( int p,int num )
4.多重繼承
class a{};
class b{};
class c:public a,public b{};
class d:virtual public a{};
class e:virtual public a,virtual public b{};
sizeof ( a ) = 1 (空類大小為1,編譯器安插乙個char給空類,用來標記它的每乙個物件)
sizeof ( b ) = 1 (空類大小為1,編譯器安插乙個char給空類,用來標記它的每乙個物件)
sizeof ( c ) = 1 (繼承或多重繼承後空類大小還是1)
sizeof ( d ) = 4 (虛繼承時編譯器為該類安插乙個指向父類的指標,指標大小為4)
sizeof ( e ) = 8 (指向父類a的指標與父類b的指標,加起來大小為8)
5.資料對齊
類(或結構)的大小必需為類中最大資料型別的整數倍.cpu訪問對齊的資料的效率是最高的,因此通常編譯浪費一些空間來使得我們的資料是對齊的
class a;
class b;
class c;
sizeof(a) = 4 (內含乙個int ,所以大小為4)
sizeof(b) = 8 (int為4,char為1,和為5,考慮到對齊,總大小為int的整數倍即8)
sizeof(c) = 8 (同上)
6.函式與虛函式
編譯器為每個有虛函式的類都建立乙個虛函式表(其大小不計算在類中),並為這個類安插乙個指向虛函式表的指標,即每個有虛函式的類其大小至少為乙個指標的大小4
class a;
class b;
class c:public b;
class d:public b;
class e;
sizeof (a) = 4 (內含乙個int,普通函式不佔大小)
sizeof (b) = 8 (乙個int ,乙個虛函式表指標)
sizeof (c) =12 (乙個int ,乙個虛函式表指標,乙個char ,再加上資料對齊)
sizeof (d) = 8 (乙個int ,乙個虛函式表指標,多個虛函式是放在乙個表裡的,所以虛函式表指標只要乙個就行了)
sizeof (e) = 1 (static 函式不佔大小,空類大小為1)
7.父類的私有資料
雖然在子類中不可用,但是是可見的,因此私有的資料還是要佔子類的大小
class a;
class b:public a{};
sizof(b) = 4; (內含乙個不可用的父類的int)
8.大概就這麼多了吧,想到再加吧。虛函式,多重繼承,空類是比較複雜的,大家大概記住知道就行了
weiloujushi補充:
class static_d
};sizeof(static_d) ==1 //靜態資料成員不計入類內
轉 關於Log4j比較全面的配置
log4j的配置之簡單使它遍及於越來越多的應用中了 log4j配置檔案實現了輸出到控制台 檔案 回滾檔案 傳送日誌郵件 輸出到資料庫日誌表 自定義標籤等全套功能。擇其一二使用就夠用了,1 配置根logger level 日誌的級別,指定這條日誌資訊的重要性。分為all debug info warn...
關於c 中的sizeof
再舉個例子 include iostream using namespace std int main 為什麼a結果不是2呢?sizeof本身是c c 的乙個關鍵字 和int char一樣 而不是乙個函式,這注定它是在編譯期所執行的,而在編譯期a b是不會被執行的 同時sizeof的作用是求某個型別...
關於c 中的sizeof
再舉個例子 include iostream using namespace std int main 為什麼a結果不是2呢?sizeof本身是c c 的乙個關鍵字 和int char一樣 而不是乙個函式,這注定它是在編譯期所執行的,而在編譯期a b是不會被執行的 同時sizeof的作用是求某個型別...