c++sezeof

c++面試中,sizeof是經常被問到的概念。

 問:定義一個空類型,裏面沒有任何成員變量和成員函數,對該類型求sizeof,結果是多少?

 答:結果是1

 問:爲什麼不是0

 答:空類型的實例中不包含任何信息,本來求sizeof應該是0,但是當聲明該類型的實例時,它必須在內存中佔有一定的空間,否則無法使用這些實例。至於佔用多少內存,由編譯器決定。Visual Studio中每個空類型的實例佔1個字節的空間。

 問:如果在該類型中添加一個構造函數和析構函數,再對該類型求sizeof,結果是多少?

 答:仍然是1。調用構造函數和析構函數只需要知道函數地址即可,而這些函數的地址只與類型相關,與類型的實例無關,編譯器不會因爲這兩個函數而在實例內添加任何額外信息。

 問:如果把析構函數標記爲虛函數呢?

 答:c++編譯器一旦發現一個類型中有虛函數,就會爲該類型生成虛函數表,並在該類型的每一個實例中添加一個指向虛函數表的指針。在32位的機器上,一個指針佔4個字節,因此sizeof結果爲4;在64位機器上,一個指針佔8個字節,因此sizeof結果爲8

 【學習資料】《劍指offer 名企面試官精講典型編程題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章