最近看了一些内存管理方面的文章,思考: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、看起来某个进程卯上某块内存后,会反复使用,这个机制需要进一步探究……..未完待续