【C语言】动态内存分配

我们再了解内存的分配情况前,首先我们需要了解代码及其中的东西,在内存中都是怎么存放的。我们首先来看一个示意图。


这张图片展示的就是代码在存储区的存储状况,最上面是代码段,代码段就是用来保存代码的文本文档的。全局变量区就是用来保存全局变量和静态变量的,所有的全局变量都在这一部分。而栈是用来保存局部变量的,栈里面保存的变量申请以后由操作系统来负责释放,而与之相对应的是堆,申请堆里面的内存,称为动态内存分配。堆比较大但是它里面的变量不是由操作系统来管理的,而是可以自由申请的,但是申请以后是必须释放的,如果不释放,就会造成内存泄漏,内存泄漏是一个比较严重的问题,会使内存越来越少,设备越来越卡顿 ,所以在用动态内存分配的时候,需要特别的注意。

对内存动态的分配,是使用库函数里面的函数来实现的。主要由malloc,calloc,realloc,free这4个函数。因为我们在声明部分没有定义它们为变量或者是数组,因此我们不能通过你函数名来引用它们,只能通过指针来引用。

1.mallco函数

mallco函数的原型为void * malloc(unsigned int size)

函数malloc的形参为无符号的整形,因为size表示的就是需分配长度为size的连续空间,地址是没有负数的,因此使用unsigned类型,函数的返回值是分配的地址空间的首地址,此函数是一个函数指针,因此返回的指针指向该分配区域的开头位置,如果申请失败,则返回的是空指针NULL。

2.calloc函数

calloc函数是用来分配n个长度为size的连续空间,其函数原型为void * calloc(unsiged n,unsiged size)其中。该函数还可以为一维数组开辟动态存储空间,n为数组元素的个数,size为每个数组元素的大小。如果分配成功,则返回分配的首地址,分配失败返回空指针。例如 p=calloc(50,4)表示的就是分配50个大小为4字节的连续区域。

3.realloc函数

realloc函数是用来改变已分配的动态内存空间的大小的,其函数原型为void * recalloc(void *p,unsiged int size),表示将p所指向的内存空间大小改为size。

4.free函数

free函数是用来释放已经动态分配的内存。以供其他变量来使用。其函数原型为void * free(void *p),表示的就是释放申请的p的内存。free函数没有返回值。如free ( p )表示的就是释放p的空间。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值