code:malloc - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
|source =
- 用于分配指定大小的空闲块,给程序使用
- 共传入两个参数 : mp 和 size
- mp : 用于管理空闲块的链表
- size : 请求分配的空闲块的大小
- 若分配成功,返回分配空闲块的首地址;否则,返回0
2521
2522 /*
2523 * Allocate size units from the given
2524 * map. Return the base of the allocated
2525 * space.
2526 * Algorithm is first fit.
2527 */
2528 malloc(mp, size)
2529 struct map *mp;
2530 {
2531 register int a;
2532 register struct map *bp;
2533
2534 for (bp = mp; bp->m_size; bp++) {
遍历空闲块链表所有元素,m_size = 0 为链表结束标志2535 if (bp->m_size >= size) {
若某一空闲块可供分配2536 a = bp->m_addr;
2537 bp->m_addr =+ size;
修正该空闲块大小2538 if ((bp->m_size =- size) == 0)
2539 do {
2540 bp++;
2541 (bp-1)->m_addr = bp->m_addr;
2542 } while((bp-1)->m_size = bp->m_size);
若分配后该空闲块大小为0,将其从链表删除2543 return(a);
分配成功,返回分配空闲块的首地址2544 }
2545 }
2546 return(0);
分配失败,返回02547 }
2548 /*---------------------- */