一.数据在内存中的存储
1.代码段(常量区): 存放字符串常量("abc"),const全局变量,机器指令(代码),函数编译后的二进制指令
2.数据段(静态区): 存放全局变量,static静态变量(包括函数内static,函数外static),初始化的全局/静态变量,未初始化的全局/静态变量
3.栈: 存放函数内局部变量,函数形参,函数返回地址,临时变量
4.堆: 存放手动申请的动态内存
练习1:

解析 : globalVar是全局变量,存放在静态区。staticGlobalVar是静态全局变量,存放在静态区。staticVar是函数内static静态局部变量,存在静态区。locaVar是普通局部变量,放在栈上。num1是局部数组,本质为局部变量,放在栈。char2是字符数组,也是局部变量,放在栈。*char2等价于char20,就是栈数组里的第一个字符。pchar3是指针变量(局部变量),放在栈。abcd是字符串常量,放在代码段,*pchar3就是访问这个常量的首个字符。ptr1是局部指针变量,放在栈。*ptr1访问的堆内存。
二.C++内存管理方式
1.new/delete操作内置类型

注意事项:如果是动态申请多个空间,释放空间时必须搭配delete 使用,否则编译器会报错
2.new/delete操作自定义类型



new/delete和free/malloc的区别:
malloc和free是函数,new和delete是操作符
malloc申请的空间不会初始化,new可以初始化
malloc申请空间时,需要手动计算空间大小,new只需在后面跟上空间的类型即可,如果是多个对象, 中指定对象的个数即可
malloc的返回值为void*,在使用时必须强转,new不需要
malloc申请空间失败时,返回的是NULL,因此必须要判空,new不需要,但new需要捕获异常
申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造/析构函数,new/delete会
使用场景:构建简单的链表


三。模板
1.定义:模板是代码复用工具,不用为每种类型单独写一个函数。模板不是代码,是编译器生成代码的蓝图。编译阶段,编译器根据你传入的类型,实例化出对应类型的代码。
2.使用方法:
(1)函数模板 -> template<typename T> 或 template<class T>
(2)类模板 -> template<typename T> 或 template<class T>
3.使用示例:



4.说明:如果有专门处理 int 的加法函数,则会优先调用这个专门处理加法的函数。如果没有此函数,才会调用函数模板