C++内存管理:
内存区域的两种划分的方法:
1.栈、堆、全局区、常量区、代码区
栈:系统在用户定义的时候就会自动分配的空间,只要不特殊说明的话,函数也在栈上,栈的增长方式是向下增长
堆:动态内存分配可以申请到的空间,无名的空间也在堆上申请,数据量较大的空间也在堆上申请,堆的增长方式是向上增长
全局区:直观的看上去,全局区的位置确实在堆的下方,但是全局是可以增长的,最大可以增长到所有的内存,所以全局区也可以看做是内存的大小,全局区不仅存放的是全局变量,同时静态变量也在全局区
常量区:存放着一些常量
代码区:存放的是代码,避免每次代码的执行都从硬盘上读取,提高了效率,常量区与代码区都在只读区域
2.data区域、bss区域、text区域
data区域:包括栈、堆、初始化了的全局变量
bss:包括未初始化的全局变量
text:只读区域,包括常量区与代码区
动态内存分配在C++中的方式
我们在C语言中经常使用malloc/free等函数来完成动态内存分配,比起这两个函数C++中的new/delete两函数主要是可以调用构造与析构函数,非常适合在C++中使用。
int * pi = new int ;
delete pi;
int * pi = new int [6];
delete[] pi;
new定位表达式:
主要结合内存池使用,作用是可以在内存的某个指定位置开始开辟空间
补充:类在栈和堆上创建对象,主要使用的是静态的成员函数
模板初级
模板函数,可以传入类型的函数
template <class/typename T>
返回值 函数名(参数列表)
{}
模板函数的匹配的规则是:始终会匹配最适合当前类型的
并且模板也可以定义多个传入的类型
模板类
template <class/typename T>
class 类名
{
};