使用鍊錶管理記憶體的使用,這兒重新定義了 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 所有請求的記憶體大小...