malloc、free机制初探

最近看了一些内存管理方面的文章,思考:linux下malloc、free到底是个什么流程,free完了后那块内存是直接放进空闲内存链表,还是清空后放入内存链表。
这个问题也可以理解为:malloc后的那块内存到底干部干净。
闲话少说,上测试代码,very easy!
int main(int argc, char ** argv) 
{
    printf("mem test!\n");
    int * p;
    int i=0;
    while(1)
    {
        i++;
        p=(int *)malloc(100000);
        printf("%d:%d  %x\n",i,*p,p);
        p[0]=i;
        free(p);    
        usleep(1000000);        
    }            
    return 0;
}

第一次执行打印结果:
./test
mem test!
1:0 414008
2:1 414008
3:2 414008
4:3 414008
5:4 414008

第二次执行打印结果:
./test
mem test!
1:0 c0b008
2:1 c0b008
3:2 c0b008
4:3 c0b008
5:4 c0b008

结论:
1、malloc会在系统中随机分配一个空闲内存块,每次分配的地址可能不相同
2、free完了后,系统直接把【不干净】的这块内存放到空闲内存链表中
3、malloc分配的内存,并不一定是【干净】的内存,必须clear后再使用
4、看起来某个进程卯上某块内存后,会反复使用,这个机制需要进一步探究……..未完待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值