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);

分配失败,返回0
2547 }

2548 /*---------------------- */





Table of Contents

Extend

举例

Ref

Caller

⚠️ **GitHub.com Fallback** ⚠️