用c c 寫乙個堆疊管理程式

2021-06-09 20:23:03 字數 2855 閱讀 6202

這是乙個面試題,那個狗日的面試官讓我當場寫出來,我要是能寫出來也得累出血了。感謝原文作者的貢獻,文中還有小錯誤,會盡快改正。
標頭檔案:

#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檔案,也就意味著,要針對每種鍊錶都寫一套插入 刪...