今天看到了這樣一道題:
//64位電腦 執行c++結果輸出?)
classa;
};classb:
public virtual a
; virtual voidaa(
);};
classc:
public virtual b
; virtual voidaa(
);virtual voidbb(
);};
int main()
答案是:16 32 48
這裡只說一下關於這道題的解析:
在64位系統中是8位元組對齊。
在64位系統下,指標占用8位元組(32位系統中指標占用4位元組)。
類空間大小是成員中記憶體最大值的最小整數倍。
類中的所有虛函式都存在乙個虛函式表中,所以只需要乙個指標來指向虛函式表。指標占用類的記憶體空間,虛函式表不占用。
普通繼承的時候父類和子類共享虛函式表,虛繼承的時候不共享。
綜上,a類中:char a[2]占用2位元組,虛函式表指標占用8位元組,記憶體對齊之後占用16位元組,也就是sizeof(a) = 16
b類中:char b[2]占用2位元組,char a[2]占用2位元組,虛函式表指標占用8位元組,記憶體對齊之後占用16位元組,加上a類的16位元組,sizeof(b) = 32
c類中:char a[2]占用2位元組,char b[2]占用2位元組,char c[2]占用2位元組,虛函式表指標占用8位元組,記憶體對齊之後占用16位元組,加上b類的32位元組,sizeof(c ) = 48
對於虛繼承及繼承的記憶體布局,大神有如下的解釋:
一道關於訊號的題
用fork建立兩個子程序,呼叫signal 讓父程序接收鍵盤上的中斷訊號 control c 捕捉到訊號後父程序用kill 向子程序傳送自定義訊號,子程序捕捉到訊號後分別輸出如下資訊後終止 child process 1 is killed by parent child process 2 is ...
360一道關於this的題目
原題目是這樣子的 window.val 1 var obj 說出下面的輸出結果 obj.dbl var func obj.dbl func this呢其實就是這樣,分清楚呼叫就好了。obj中的沒有指定呼叫。預設從函式中查詢。如果沒有則往上一級查詢。所以 上面的式子可以寫成這樣 window.val ...
一道關於矩陣的題
wzz的視察 檔名 inspect 時限 1s 記憶體 256mb decription wzz擁有乙個王國。他的王國是長方形的,跨越了n個維度區和m個經度區,且在每個經度區和緯度區的交界處有一座城市 即wzz的王國一共有n m座城市 某一天早上,wzz從他的一萬平方公尺的大床上起來,他決定去視察一...