1.「static_cast/強制轉換」後普通函數、虛函數的表現html
A基類函數
B子類htm
實例aPtr:將B實例強制抓換獲得的A實例blog
實例bPtr:將A實例強制轉換獲得的B實例ip
總結:內存
(1)get
aPtr由於是從B實例強制轉換過來的,因此虛函數始終調用B的虛函數實現it
bPtr由於是從A實例強制轉換過來的,因此虛函數始終調用A的虛函數實現ast
(2)變量
static_cast和強制轉換則根據轉換後的結果來進行調用
2.sizeof內存對齊
步驟一:結構體內每一個變量,有效對齊值=「min(當前位置的變量類型的長度, n)」得到初步的size爲num)
步驟二:num根據「min(全部變量類型的最長長度, n)」補充對齊(到能被該值整除的地步)
範例:
#pragma pack(push, 4)
struct A{
int a;
short b;
char c1;
char c2[7];
int d;
char e;
}
步驟一:
內存分配以下:
a: 0 1 2 3
b: 4 5
c1: 6
c2: 7 8 9 10 11 12 13
d: 16 17 18 19
e: 20
num=4+2+8+空白2+4+1=21
步驟二:
num須要填充到24才能被max(4, 4)整除,因此sizeof(A) = 24
32位和64位其餘區別見:
http://www.cnblogs.com/sara-gcj/p/3324187.html
32位 64位