基于块状态标记内存管理实现与优化.pdfVIP

  • 0
  • 0
  • 约7.1千字
  • 约 6页
  • 2025-12-30 发布于四川
  • 举报

基于块状态标记内存管理实现与优化.pdf

/*1*使用最后三个中的第二个无用位来标记前一个块的状态,而不是使用footer。3*因此,我

们必须修改这些函数:mm_init(),mm_malloc(),4mm_free(),coace。5*同时,我们需要

的宏来协助:GET_PREVA(),PACK(size,6PA,A)7*8*9*/1011#include

12cp.h13#defineDSIZE814#defineWSIZE415#define

PACK(size,A)((size)|A)16#definePACK(size,PA,A)((size)|(PA)|A)17#define

GET_PREVA(p)(GET(p)0x2)1819/*20*修改后的mm_init()21*当malloc时,设置下一个

块的PA22*23*/24intmm_init(void){25if(((heap_listp)=mem_sbrk(4*WSIZE))

(void*)‑1)26return‑1;2728PUT(heap_listp,0);29PUT(heap_listp+(1*WSIZE),

PACK(DSIZE,0X2,1));//添加前一个标记30PUT(heap_listp+(2*WSIZE),PACK(DSIZE,0X2,

1));31PUT(heap_listp+(3*WSIZE),PACK(DSIZE,0X2,1));32heap_listp+=(2*WSIZE);33

34if(extend_heap(CHUNKSIZE/WSIZE)NULL)35return‑1;36return0;37}38394041/

*42*修改后的mm_malloc()43*44

1/*

2*Usethesecondno-usebitinthelastthreetomarktheprev

3blocksstatusinsteadofusingthefooter.

4*Thus,wehavetochangethesefunctions:mm_init(),mm_malloc(),

5mm_free(),coace.

6*Also,weneedsomemoremacrostohelp:GET_PREVA(),PACK(size,

7PA,A)

8*

9*

10*/

11

12#includecp.h

13

14#defineDSIZE8

15#defineWSIZE4

16#definePACK(size,A)((size)|A)

17#definePACK(size,PA,A)((size)|(PA)|A)

18#defineGET_PREVA(p)(GET(p)0x2)

19

20/*

21*Revisedmm_init()

22*Whenmalloc,setthenextblockPA

23*

24*/

25intmm_init(void){

26if(((heap_listp)mem_sbrk(4*WSIZE))(void*)-1)

27return-1;

28

29PUT(heap_listp,0);

30PUT(heap_listp+(1*WSIZE),PACK(DSIZE,0X2,1));//ADDPREVTAG

31PUT(heap_listp+(2*WSIZE),PACK(DSIZE,0X2,1));

32PUT(heap_listp+(3*WSIZE),PAC

文档评论(0)

1亿VIP精品文档

相关文档