[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位
 
                     
                    
                 
                    
                

![clipboard[1] clipboard[1]](http://images0.cnblogs.com/blog/315832/201504/181945327766608.png)
![clipboard[2] clipboard[2]](http://images0.cnblogs.com/blog/315832/201504/181946001511145.png)
![clipboard[3] clipboard[3]](http://images0.cnblogs.com/blog/315832/201504/181946116673394.png)
![clipboard[4] clipboard[4]](http://images0.cnblogs.com/blog/315832/201504/181946209791815.png)
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号