int main()
{
int *p;
p=malloc(1);
printf("1byte:0x%x\n",p);
p=malloc(1);
printf("1byte:0x%x\n",p);
p=malloc(4096);
printf("4096:0x%x\n",p);
p=malloc(4096*100);
printf("4096*100:0x%x\n",p);
return 0;
}
#./a.out
1byte:0x8ab6008
1byte:0x8ab6018
4096:0x8ab6028
4096*100:0xb7775008
得出两个结论:
1.malloc分配器最少分配16字节。
2.一般malloc返回地址在0x8040000-0x40000000之间,且堆是向上增长的。这时候是用brk分配内存。
但是超过一定大小的堆是在0x4000000之上的。因为这个时候是用mmap分配内存
问题1:;这个大小是多少?
问题2:
#include<stdio.h>
int main()
{
char *p=malloc(1);
free(p);
*p='p';
printf("smile every day!%c\n",*p);
}
这个输出结果是 smile every day!p
不属于进程的空间,进程是不能访问的,p难道还在进程空间中?