[C++知识点]2015.4.18
1.“static_cast/强制转换”后普通函数、虚函数的表现
A基类
B子类
实例aPtr:将B实例强制抓换得到的A实例
实例bPtr:将A实例强制转换得到的B实例
总结:
(1)
aPtr因为是从B实例强制转换过来的,所以虚函数始终调用B的虚函数实现
bPtr因为是从A实例强制转换过来的,所以虚函数始终调用A的虚函数实现
(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位