Merge branch 'master' of github.com:chyyuu/ucore_lab

This commit is contained in:
yuchen 2015-03-22 21:41:59 +08:00
commit 989c778c51
2 changed files with 7 additions and 1 deletions

View File

@ -7,7 +7,6 @@ From
try to try to
``` ```
gcc -g -O0 -o buddy_system buddy_system.c gcc -g -O0 -o buddy_system buddy_system.c
酷 壳 CoolShell.cn
gdb buddy_system gdb buddy_system
``` ```

View File

@ -2,6 +2,13 @@
## 来源 ## 来源
from [malloc/free函数的简单实现及思考](http://www.cnblogs.com/wuyuegb2312/archive/2013/05/03/3056309.html) by 五岳 from [malloc/free函数的简单实现及思考](http://www.cnblogs.com/wuyuegb2312/archive/2013/05/03/3056309.html) by 五岳
## run & debug
try to
```
gcc -g -O0 -o kr_malloc_free kr_malloc_free.c
gdb kr_malloc_free
```
## 简单思路 ## 简单思路
### 管理free block的数据结构 ### 管理free block的数据结构
仅仅依靠地址运算来进行定位是限制分配回收灵活性的原因它要求已使用部分和未使用部分必须通过某个地址分开成两个相邻区域。为了能让这两个区域能够互相交错甚至其中还包括一些没有分配的地址空间需要使用指针把同类的内存空间连接起来形成链表这样就可以处理地址不连续的一系列内存空间。但是为什么只连接了空闲空间而不连接使用中的空间这么问可能出于在对图中二者类比时的直觉而没有经过思考这很简单因为没有必要。前者相互链接是为了能够在内存分配时遍历所有空闲空间并且在使用free()回收已使用空间时进行重新插入。而对于使用中的空间由于我们在分配空间时已经知道它们的地址了回收时可以直接告诉free()并不用像malloc()时进行遍历。 仅仅依靠地址运算来进行定位是限制分配回收灵活性的原因它要求已使用部分和未使用部分必须通过某个地址分开成两个相邻区域。为了能让这两个区域能够互相交错甚至其中还包括一些没有分配的地址空间需要使用指针把同类的内存空间连接起来形成链表这样就可以处理地址不连续的一系列内存空间。但是为什么只连接了空闲空间而不连接使用中的空间这么问可能出于在对图中二者类比时的直觉而没有经过思考这很简单因为没有必要。前者相互链接是为了能够在内存分配时遍历所有空闲空间并且在使用free()回收已使用空间时进行重新插入。而对于使用中的空间由于我们在分配空间时已经知道它们的地址了回收时可以直接告诉free()并不用像malloc()时进行遍历。