主要学习了内存管理和模块
内存管理主要包括内存分布、内存管理方式;模块主要是函数模板以及类模板。
一、内存管理:
1、内存分布:
这里需要注意一下全局变量和全局静态变量之间的差别:全局变量和全局静态变量的作用域都是全局的,但是其链接属性不同,全局变量是所有课件可用,全局静态变量只有当前文件可见。
栈:主要存放非静态变量、函数参数、返回值等等;并且栈是向下增加。总结也就是存放局部变量。
堆:主要存放动态开辟的内存。堆是向上增加。
数据区:也叫静态区,主要存放全局数据和静态变量。
代码区:主要存放常量。
2、内存管理方式
c语言中主要运用malloc、realloc、calloc、free来管理动态内存管理;c++中引用了new和delete来管理内存。
两者之间的区别是;malloc等是函数,new是操作符;malloc等返回值为void*,new返回值为其变量类型指针;malloc参数为字节数,new后i面跟的是申请对象的类型;malloc申请失败返回的为NULL;new申请失败会抛异常,并且会调用构造函数。
new的实现原理:new申请空间主要借用operator new+构造函数来实现的,operator new是通过malloc+抛异常来实现的,说到底new申请空间也是malloc实现的。
二、,模板
模板原理:编译器通过调用函数模板或类模板类型,实例化出对应的函数和类。
模板主要分为函数模板和类模板
1、函数模板
函数模板指的是一个函数家族,该家族与类型无关,在使用时被初始化。(预处理阶段就完成)
operator<class t1...class tn>//class可以替换typename。
2、类模板
operator <class t1...class tn>
class Date{};
其中的Date只是类名,在这里不代表其类型,类型为Date<int>//int只是类型的一种,不一定就是此类型。
还有就是类模板的成员函数在类外定义时,需要增加模板参数列表。