C++的内存对齐
C++的内存对齐是指将数据存储在内存中时,会按照一定规则将数据的起始地址对齐到特定的地址上。在计算机中,数据的存储和访问通常是以字节为单位,而不是以位为单位的,内存对齐可以提升数据访问的效率。
提高数据访问效率。数据按照内存对齐规则时,CPU 可以一次读写多个数据,不需要多次访问内存;
减少内存碎片。按照规则对齐的数据大小通常是 2 的幂次方,避免出现奇怪的内存碎片;
提高缓存命中率:内存对齐可以提高缓存命中率。现代 CPU 中通常都有多级缓存,缓存的大小和行大小都是有限制的。当数据按照规则对齐时,它们可以更好地利用缓存行,从而提高缓存命中率。
保证数据正确性:内存对齐可以保证数据的正确性。当数据按照规则对齐时,可以避免出现数据对齐错误的情况,从而保证数据的正确性。
C++的继承、多态与虚函数
一、继承和多态的实现原理
继承是面向对象的一个重要概念,继承允许一个类从另外一个类继承它的属性和方法。并且允许子类重写父类的方法,从而实现不同的功能。
虚函数是C++中实现动态多态的关键机制,虚函数是一个在基类中声明的函数,它可以被子类重写。在使用基类指针或者引用调用虚函数时,实际调用的是子类中的实现。
虚函数表是 C++中实现动态多态的机制(vtable)。
每个包含虚函数的类中,都有一个虚函数表,它存储了该类的虚函数地址。当一个类被实例化(就是声明这个类的对象)时,它的对象中会包含一个指向该类虚函数的指针(vptr)。
编译器会根据虚函数指针来找到该对象所属基类对应的虚函数表,然后根据函数在虚函数表中的位置找到实际要调用的函数。实际调用的函数是在运行时确定的,而不是在编译时确定的,这个过程叫做动态绑定。
虚函数表是属于类的,不是属于类对象的,每个类有一个虚函数表;虚函数指针是属于类对象的,它指向类的虚函数表。
静态绑定是C++中的另一种机制,主要实现函数重载(同一作用域内定义多个同名但是参数类型或参数个数不同的函数)、运算符重载。因为要调用哪个函数是在编译阶段确定的,而 ...