這是乙個面試題,那個狗日的面試官讓我當場寫出來,我要是能寫出來也得累出血了。感謝原文作者的貢獻,文中還有小錯誤,會盡快改正。
標頭檔案:
#ifndef _ksmfmemory_
#define _ksmfmemory_
#ifndef kcahr
#define kchar char
#else
#define kchar short
#endif
#ifdef _cplusplus
extern "c"
#endif
#ifdef _debug
#ifndef kmalloc
#define kmalloc(size) ks_malloc(size,_file_,_line_)
#endif
#ifndef kfree
#define kfree(p) ks_free(void*)
#endif
#ifndef kgetnotfree
#define kgetnotfree ks_get_not_free
#endif
#ifndef kfreenotfree
#define kfreenotfree ks_free_not_free_memory
#endif
#else
#ifndef kmalloc
#define kmalloc malloc(size)
#endif
#ifndef kfree
#define kfree free(p)
#endif
#ifndef kgetnotfree
#define kgetnotfree
#endif
#ifndef kfreenotfree
#define kfreenotfree
#endif
#endif
#endif// 相對應標頭檔案的
主檔案:
#include "ksmfmemory.h"
#include#include#include#ifndef null
#define null ((void*)0)
#endif
#ifndef invalid_addr
#define invalid_addr (0)
#endif
#ifndef ismalloc
#define ismalloc (1)
#endif
#ifndef long
#define long(p) ((unsigned long)p)
#endif
#ifndef byte
#define byte char
#endif
typedef struct _memory_node
mem_node,*lp_memnode;
lp_memnode _node_top=null;
#ifdef _cplusplus
extern "c"
#endif
static int ks_get_file_name(kchar *path,kchar **name)
i++;
} *name=(kchar*)&path[pos+1];
if(pos==0)
return 0;
else
return (i-pos);
}static kchar *ks_strcpy(kchar *des,kchar *src)
src=p_temp;
return des;
}static lp_memnode ks_create_node()
static void ks_delete_node(lp_memnode p)
static lp_memnode ks_add_node(lp_memnode pcurrent,lp_memnode new_node)
else
_node_top=new_node;
return _node_top;
}static lp_memnode ks_remove_node(lp_memnode remove)
if(remove->pre!=null)
else }
static lp_memnode ks_find_node(unsigned long l_mem_addr)
return null;
}void *ks_malloc(int size,kchar *file_path,int line)
name_len=ks_get_file_name(file_path,&name);
p_temp->s_file_name=(kchar*)malloc(name_len*sizeof(kchar)+1);
if(p_temp->s_file_name==null)
ks_strcpy(p->s_file_name,name);
p_temp-line=line;
p_temp->imemoryaddr=long(p);
ks_add_node(_node_top,p_temp);
++((byte*)p);
return p;
}void ks_free(void *p)
}int ks_get_not_free()
return num;
}void ks_free_not_free_memory()
}#ifdef _cpluspluc
}#endif
用C語言寫乙個記憶體管理程式
用c語言寫乙個記憶體管理程式 這個程式有2個系統呼叫和3種記憶體分配策略。並計算效能 平均記憶體利用率,尋找孔 hole 次數 系統呼叫 system calls 1 void mm request int n 這個系統呼叫是請求乙個連續的n位元組的記憶體塊 block 如果請求成功,返回乙個指標到...
pyqt乙個簡單的計畫管理程式
功能 1.儲存計畫,2.讀取計畫 編碼的問題搞了我好久,之前讀取都是亂碼的。效果示例圖 如下 coding utf 8 import sys from pyqt4 import qtcore,qtgui,uic import locale qtcreatorfile plan.ui enter fi...
乙個通用的雙向鍊錶管理程式
在寫乙個小工具的時候,需要用到對ini檔案的管理。為了讓這個小工具在linux也適用,所以在寫程式的時候沒有使用mfc提供的類庫,也沒有使用windows提供的ini操作函式,直接拿標準c寫了乙個。在操作ini的過程中,我拿兩種雙向鍊錶來描述乙個ini檔案,也就意味著,要針對每種鍊錶都寫一套插入 刪...