3-26(内存管理)

主要学习了内存管理和模块

内存管理主要包括内存分布、内存管理方式;模块主要是函数模板以及类模板。

一、内存管理:

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只是类型的一种,不一定就是此类型。

还有就是类模板的成员函数在类外定义时,需要增加模板参数列表。










上一篇:问题1 2021/11/26 未知格式


下一篇:动态内存分配:malloc、calloc和realloc