浅谈linux下malloc函数的内存管理

浅谈linux下malloc函数的内存管理

-----------本文章属于一个初学linux菜鸟的心得,若有哪里不对希望看到这篇文章的大牛予以指出,必不胜感激。
我们都知道在c语言中有一个用于在堆中开辟空间的函数malloc,那么在linux下malloc又是怎样工作的呢,下面就让小菜给大家谈一谈我的一些心得.
        事实上malloc函数在开辟空间时,在linux系统中是通过一个类似于链表的数据结构来维护的,这个数据结构主要包括四个部分: 1、本空间部分 2、维护上一个空间部分 3、维护下一个空间部分 4、存放本空间大小的部分 。大家看下面一个例子吧:
有一个这样的程序:
     int *p = (int *)malloc(4);
     *p = 1;
     *(p+1) = 2;
     *(p+2) = 3;
大家可能会觉得这个程序会报错,但事实上在linux下这个程序并不会报错,原因正是像刚才所说的,事实上malloc开辟空间时不仅开辟了自己的空间1,系统在维护时使用的数据结构还有像上面所说的2,3,4的部分,所以刚刚的例子不会发生编译错误,但事实上它破坏了维护结构中的数据。也使得malloc不能正常工作,所以这时加入你再添加一句
    free(p)
就会出问题了,因为你已经把结构破坏了,释放空间时就会发生错误。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值