/************************************************* * function: implement memory free **************************************************/
static void _mem_free(MNG_NODE* pNode) { MNG_NODE* pPreNode;
if(pNode == pAllocList) { pAllocList = pAllocList->next; add_node_into_list_head(pNode, &pFreeList); return; }
pPreNode = find_previous_node_in_list(pNode, pAllocList); if(NULL == pPreNode) return;
pPreNode->next = pNode->next; add_node_into_list_head(pNode, &pFreeList); return; }
/************************************************* * function: free memory function **************************************************/
void mem_free(void* pData) { if(NULL == pData) return;
if(pData < pGlbData || pData >= (void*)((char*)pGlbData + MEM_BUFFER_LENGTH)) return;
_mem_free((MNG_NODE*)((char*)pData - sizeof(MNG_NODE))); }
/************************************************* * function: get memory buffer **************************************************/
void mem_init() { pGlbData = (void*)malloc(MEM_BUFFER_LENGTH); if(NULL == pGlbData) return;
memset(pGlbData, 0, MEM_BUFFER_LENGTH); pFreeList = (MNG_NODE*)pGlbData; pFreeList->size = MEM_BUFFER_LENGTH - sizeof(MNG_NODE); pAllocList = NULL; }
/************************************************* * function: free memory buffer **************************************************/
void mem_exit() { if(NULL != pGlbData) free(pGlbData);
pFreeList = NULL; pAllocList = NULL; }
/************************************************* * function: file starts here **************************************************/
int main(int argc, char* argv[]) { mem_init(); mem_exit(); return 1; } |