我们知道,在内存中大概可以分为,系统占用区,栈区,堆区,常量区(常量区又可以分为已初始化常量区,和未初始化常量区),还有就是代码段
我们今天主要介绍的是动态内存管理,而动态内存管理中常用的函数就是操控的是堆区的空间
我们可以看到如上图所示,堆是向上增长,而栈是向下
我们今天交钱的函数就是操控堆区的空间
我们来看一下今天介绍的函数,malloc,calloc,realloc,free
其中free是个另外三个搭配使用,既然有主动的申请空间,那么用过之后当然得还回去,所以free就是释放空间,把空间还给系统
开始介绍今天的函数
第一个malloc
我们先看一下他的参数和返回值,参数是一个大小,指的是开辟多少个字节的空间,而开辟好后,把这个空间的起始地址返回,由于不知道使用者想要的是什么类型,所以返回值是一个空指针
我们简单的看一下用法
我们调用malloc函数,然后开辟10int类型大小的空间,由于malloc返回值是一个void的指针,所以我们强制类型转化一下,让他成为我们所需要的类型
下面我们在看一下如何使用
我们开辟好内存后,将每一个位置都赋值,然后再打印一遍
我们可以看到,我们可以使用这块空间
下面我们看一下calloc
calloc的参数多了一个num,其中num的意思是开辟多少个空间,size的意思是每个空间的大小我们下面看一下怎么样使用
我们可以看到,如上图所示,那么我们在打印一下里面的值有什么区别
我们可以看到都是相同的,那么malloc和calloc两个函数除了参数有一点差个那么其他还有区别吗?
我们下面看一下
我们先看一下malloc,我们调试来看,我们申请了四十个字节的空间我们监视看一下
申请出来后里面的值是内存中的随机值。
那么我们看一下calloc
我们可以看到calloc申请的内存被初始化为了0,所以他们除了参数有区别还有就是calloc多了初始化
下面我们在看一下realloc
realloc的参数是一个空类型的指针,还有一个就是大小,而这个函数的作用是,把一块空间修改大小,而size就是想要修改的值
我们来看一下
我们先申请10和整形空间,然后再修改为20和整形空间
我们来看一下
我们刚开始看到,我们申请的10和整形空间,以及后面没有申请的10个整形空间
而我们realloc修改之后,我们可以看到我们又申请了10和整形空间
这就是realloc,我们最后看一下free
free的参数是一个指针,而他的作用就是释放掉申请的空间,所以他是和其他三个函数联合使用的,如果只申请不释放就是内存泄露,如果是服务器的话,最终会导致服务器卡死
free使用就是这么简单
今天介绍完毕