1. 虚函数
https://www.linuxidc.com/Linux/2019-01/156152.htm
https://blog.csdn.net/li1914309758/article/details/79916414
多继承中,基类有虚函数的内存布局靠前,然后按照定义顺序排列
多继承会有多个虚表指针,64位机每个虚表指针大小为8字节
2. 内存布局
https://coolshell.cn/articles/12176.html
3. 模板元编程
#include
usingnamespace std;
template
structFactorial
{
enum {value = n +Factorial::value};
};
template<>
structFactorial<0>
{
enum{value = 0};
};
intmain()
{
int o = Factorial<0>::value;
int v = Factorial<1>::value;
int t = Factorial<2>::value;
cout<
std::cout<
return 0;
}
4. 栈(stack):函数内声明的自动变量,函数参数;栈是向低地址扩展的数据结构,是一块连续的内存的区域,大小Windows默认2M,Linux默认8M,均可修改配置。
静态区:静态变量,全局变量,由系统内存大小限制
文字常量区:常量字符串就是放在这里的, 程序结束后由系统释放。
程序代码区:存放函数体的二进制代码。
堆(heap):new,malloc由用户申请的,高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表 的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。
5. volatile:volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,告诉编译器对该变量不做优化,都会直接从变量内存地址中读取数据,从而可以提供对特殊地址的稳定访问。。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。(简洁的说就是:volatile关键词影响编译器编译的结果,用volatile声明的变量表示该变量随时可能发生变化,与该变量有关的运算,不要进行编译优化,以免出错)
栈速度比堆快:
https://www.jianshu.com/p/27c0fc1aecab
mutable:一个结构体或类变量为const,但声明为mutable的变量也可以被修改
c++: 构造函数初始化,比赋值效率高,因为赋值需要先初始化,再赋值,多一步操作
网友评论