
博主名称:deM0one ⭐️C++专栏: C++
文章目录
- C++模板初阶:内存管理收尾、模板与STL初探
-
- 一、C/C++程序内存区域划分
-
- [1.1 内存区域总览](#1.1 内存区域总览)
- [1.2 各区域特点与使用场景](#1.2 各区域特点与使用场景)
- [二、动态内存管理:malloc/free vs new/delete](#二、动态内存管理:malloc/free vs new/delete)
-
- [2.1 共同点](#2.1 共同点)
- [2.2 六大核心区别](#2.2 六大核心区别)
- [2.3 operator new 与 operator delete 的底层用法](#2.3 operator new 与 operator delete 的底层用法)
- [2.4 内存池与池化技术](#2.4 内存池与池化技术)
- 三、模板初阶:泛型编程的利器
-
- [3.1 模板的概念与分类](#3.1 模板的概念与分类)
- [3.2 函数模板](#3.2 函数模板)
- [3.3 类模板](#3.3 类模板)
- 四、STL浅讲
-
- [4.1 STL 概述](#4.1 STL 概述)
- [STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架](#STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架)
-
- [4.2 STL 六大组件](#4.2 STL 六大组件)
C++模板初阶:内存管理收尾、模板与STL初探
今日学习:
1.malloc/free与new/delete对比区别
2.模板初阶,函数模板的用法、类模板的定义
3.STL概述,包含的组件
一、C/C++程序内存区域划分
1.1 内存区域总览
1.2 各区域特点与使用场景
- 栈区:存放一次性数据,向下增长
- 堆区:动态申请内存,向上增长
- 数据段(静态区):存放全局数据、静态数据
- 代码段:存放可执行代码与只读常量
- 内存映射区:文件映射、动态库、匿名映射
- 内核空间

二、动态内存管理:malloc/free vs new/delete
2.1 共同点
2.2 六大核心区别
- 本质不同:函数 vs 操作符
- 初始化:
malloc不初始化,new可初始化 - 空间计算:
malloc手动计算,new自动推导 - 返回值:
malloc返回void*需强转,new返回对应类型指针 - 失败处理:
malloc返回NULL,new抛异常 - 自定义类型:
malloc/free不调用构造/析构,new/delete会调用
2.3 operator new 与 operator delete 的底层用法
operator new底层调用malloc函数申请空间,
2.4 内存池与池化技术
- 内存池设计思想
- 定位 new(Placement New)
- 池化技术扩展:线程池、连接池
tips:内存池实际上就是堆额外划分的一块存放空间资源的池子供给那些需要频繁申请和释放空间的程序使用
三、模板初阶:泛型编程的利器

3.1 模板的概念与分类
-
函数模板

-
类模板
3.2 函数模板
- 函数模板格式与定义
- 模板实例化机制
- 隐式实例化(推导实例化)
- 显式实例化
- 类型推导规则与隐式类型转换

3.3 类模板
-
类模板定义与使用
-
显式实例化示例

-
手动扩容(异地扩容)实现

-
类模板支持声明与定义分离
-
但是不支持声明和定义分离在两个文件
四、STL浅讲
4.1 STL 概述
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架
4.2 STL 六大组件
- 容器(Containers):string、vector、list、deque、map、set、multimap、multiset、stack、queue
- 算法(Algorithms):find、swap、reverse、sort、merge
- 迭代器(Iterators):iterator、const_iterator、reverse_iterator
- 仿函数(Functors):greater、less
- 配接器(Adapters)
- 空间配置器(Allocator)
任何的建议和问题欢迎指出,我们共同进步!