看的过程中发现自己C学的很不好啊 ……
之前CSAPP没坚持下来,后面把CSAPP搞定吧…
太菜了╮(╯▽╰)╭
7-1
修改程序清单7-1中的程序,在每次malloc后打印program break 的值。指定一个较小的内存分配尺寸,观察现象,证明的每次malloc后program break分配了超过所需的内存区域。
7-1 修改程序清单7-1中的程序,在每次malloc后打印program break 的值。指定一个较小的内存分配尺寸,观察现象,证明的每次malloc后program break分配了超过所需的内存区域。
我们可以通过一个更简单的程序来实现观察所需的功能。1
2
3
4
5
6
7
8
9
10
11
12
int main(void){
printf("now : %10p\n", sbrk(0));
char * a;
for (int i = 0; i<10; i++)
{
a = malloc(50000);
printf("%d : %10p\n",i, sbrk(0));
}
}
运行程序输出如下:
now : 0xaf060fc000
0 : 0xaf0611d000
1 : 0xaf0611d000
2 : 0xaf06141000
3 : 0xaf06141000
4 : 0xaf06141000
5 : 0xaf06166000
6 : 0xaf06166000
7 : 0xaf06166000
8 : 0xaf0618b000
9 : 0xaf0618b000
我们可以看到每次实际上边界分配了空间大于我们所需的空间。
7-2
实现malloc()和free()。
根据课本可以知道,malloc和free是对堆操作的包装,也就是brk函数的包装,在堆空间进行的数据结构的操作