本網站在啟用 JavaScript 的情況下可以運作的更好。
首頁
探索
帮助
返回水杉在线
登录水杉在线
登录水杉码园
10213903403
/
os_kernel_lab
關注
1
收藏
0
複製
0
程式碼
問題
0
合併請求
0
版本發佈
0
Wiki
活動
瀏覽代碼
Update kr_malloc_free.md
main
chyyuu
9 年之前
父節點
d7397bc33a
當前提交
b723a05fd1
共有
1 個檔案被更改
,包括
7 行新增
和
0 行删除
分割檢視
Diff Options
Show Stats
Download Patch File
Download Diff File
+7
-0
related_info/lab2/kr_malloc_free.md
+ 7
- 0
related_info/lab2/kr_malloc_free.md
查看文件
@ -2,6 +2,13 @@
## 来源
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()回收已使用空间时进行重新插入。而对于使用中的空间,由于我们在分配空间时已经知道它们的地址了,回收时可以直接告诉free(),并不用像malloc()时进行遍历。
Write
Preview
Loading…
取消
儲存