Šī lapa labāk darbojas, ja pārlūkam ir iespējots JavaScript.
Sākums
Izpētīt
帮助
返回水杉在线
登录水杉在线
登录水杉码园
10213903403
/
os_kernel_lab
Vērot
1
Pievienot zvaigznīti
0
Atdalīts
0
Kods
Problēmas
0
Izmaiņu pieprasījumi
0
Laidieni
0
Vikivietne
Aktivitāte
Pārlūkot izejas kodu
Update kr_malloc_free.md
main
chyyuu
pirms 10 gadiem
vecāks
d7397bc33a
revīzija
b723a05fd1
1 mainītis faili
ar
7 papildinājumiem
un
0 dzēšanām
Dalītais skats
Salīdzināšanas iespējas
Rādīt statistiku
Lejupielādēt ielāpa failu
Lejupielādēt izmaiņu failu
+7
-0
related_info/lab2/kr_malloc_free.md
+ 7
- 0
related_info/lab2/kr_malloc_free.md
Parādīt failu
@ -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()时进行遍历。
Rakstīt
Priekšskatītījums
Notiek ielāde…
Atcelt
Saglabāt