【手把手带你进阶C语言】之动态内存管理
国庆不知道大家出去玩了吗?
还是待在家里学习偷偷变强呢?
不管怎么样,在这伟大祖国的诞辰,举国同庆,博主还是要祝愿大家国庆快乐!
国家在一步步向更好更强迈进,我们也不能落下呀~
所以,快跟着博主一起努力提升学习,提升自我,希望在读的各位国之栋梁早日为民族的发展壮大贡献力量。
今天我们要讲的内容是动态内存管理,在开始学习之前,先给博主我,也给国庆假期中仍然热爱学习、热爱编程的你们点个赞吧!
【手把手带你进阶C语言】之动态内存管理
为什么存在动态内存分配
首先我们要了解的是为什么要存在动态内存分配这个东西呢?
其实我们当前的内存分配是非常有限的。
int n = 20;//4byte
int arr[10];//40byte
而这种内存开辟的方法其实是非常死板的,内存中的空间一旦开辟,则空间就无法再改变了,除非我们更改代码。
为了改善这一情况,C语言中提供了一种动态内存分配的功能,我们开辟了一块空间之后,如果觉得空间大了,我们可以让空间变小,如果空间不够,就让空间增大。
这其实给了程序员更多灵活开辟空间的方式,我们就可以动态地维护空间。
首先,我们说内存中分为栈区、堆区、静态区。
堆区中存放局部变量、函数形式参数;静态区中存放静态变量和全局变量;而堆区中涉及的是动态内存分配,主要与malloc、calloc、realloc、free这几个函数有关。
那么接下来我们就来看看动态内存分配的各个函数。
动态内存分配函数
malloc
在动态区申请一块空间,我们需要用到的是malloc函数。
我们看从cplusplus中的对这个函数的介绍,malloc函数执行的操作是在堆区上向内存一块连续可用的空间,大小为size字节,并且返回指向这块空间的指针。
这里要注意malloc函数返回的指针类型是void*,因为它并不知道我们要申请的空间是用来存放什么类型的数据的。
所以我们在使用malloc在堆区上创建空间的是时候,我们要把malloc函数的返回类型强制转换成我们需要的指针类型。
需要注意的是:如果malloc开辟空间是被,则会返回一个NULL指针,所以我们在调用malloc之后,要回其返回值做检查,以确保我们的空间创建成功。
开辟成功之后,我们就可以对malloc申请得到的空间进行操作。
我们可以通过调试来看看内存中的情况。
free
当我们空间使用结束之后,要记得释放空间,这时候就要用到free函数了。
我们把刚才开辟的动态内存的地址传给free函数,这个函数即会帮我们把这块空间还给内存了。