使用鍊錶管理記憶體

2021-07-15 18:10:35 字數 1935 閱讀 9530

使用鍊錶管理記憶體的使用,這兒重新定義了 malloc,realloc,free函式,使用了mymalloc,myrealloc,myfree自己重定義了函式

mem.h

#include#includevoid * mymalloc(size_t size);

void *myrealloc(void *p, size_t size);

void myfree(void *p);

struct mem

;struct linknode

;typedef struct linknode node, *pnode;

struct linknode *phead;

pnode addnode(pnode phead, struct mem *pmem); //增加

pnode changnode(pnode phead, void *findaddr, struct mem *pmem); //修改

pnode deletenode(pnode phead, void * find); //刪除

void showall(pnode phead); //顯示所節點

void getinfo(pnode phead); //顯示詳細資訊

pnode deleteall(pnode phead); //清除所有所使用的記憶體

pnode findnode(pnode phead, void *p); //查詢

mem.c

#include"eme.h"

void * mymalloc(size_t size)

void *myrealloc(void *p, size_t size)

void myfree(void *p)

else }

pnode addnode(pnode phead, struct mem *pmem) //增加

else

ptemp->pnext = pnew;

} return phead;

}pnode changnode(pnode phead, void *findaddr, struct mem *pmem) //修改

else}}

return phead;

}pnode deletenode(pnode phead, void * find) //刪除

else

}if (p1 == phead)

else

return phead;

}void showall(pnode phead) //顯示所節點

else }

}pnode deleteall(pnode phead) //清除所有所使用的記憶體

else

//刪除頭節點

free(phead->pmem->p);

free(phead->pmem);

free(phead);

phead = null;

printf("使用的記憶體被清空......\n"); }

return phead;

}pnode findnode(pnode phead, void *p) //查詢

} return null;

}void getinfo(pnode phead) //顯示詳細資訊

printf("有 %d 片內存在使用中, 使用的記憶體位址大小為 %d k\n",i,j/1024);

}

main.c

#include"eme.h"

#define malloc mymalloc

#define realloc myrealloc

#define free myfree

void main()

記憶體管理 頁表

include asm x86 64 page.h typedef struct pte t typedef struct pmd t typedef struct pud t typedef struct pgd t 虛擬位址分為幾個部分,用作各個頁表的索引。核心使用32或64位型別來表示表項,這...

VS2013鍊錶讀取記憶體失敗,鍊錶套鍊錶

自己寫的乙個鍊錶程式,用gcc編譯正常執行,用vs2013一直報異常。終止,除錯了很久,終於發現了錯誤。class person class state typedef struct tagstatenodestatenode,pstatenode class linkstate typedef s...

C語言記憶體的動態儲存管理2 空閒鍊錶

空閒鍊錶三種結構形式 1 所有請求的記憶體大小相同。這是一種最簡單的動態儲存管理方式。對此,系統通常的做法是 a 系統啟動時,將記憶體按大小均分成若干個塊,並形成乙個鍊錶。b 分配時,只需將鍊錶中第乙個節點分配給使用者即可,無需掃瞄整個鍊錶。c 時,將空閒塊插入到煉表頭即可。2 所有請求的記憶體大小...