📄 memsys.c
字号:
#include <stdio.h>#include <stdlib.h>#include <assert.h>#include "memsys.h"#ifdef STORAGE#include "storage.h"#endifMEMSYS* ms_create (int size, int cnt){ MEMSYS *ms; assert((cnt > 0) && (size > 0) && (size % sizeof(void*) == 0)); ms = malloc(sizeof(MEMSYS)); if (!ms) return NULL; ms->cnt = cnt; ms->size = size /sizeof(void*); ms->blksz = sizeof(MSBLOCK) +ms->cnt *size; ms->free = ms->blocks = NULL; return ms; } /*--------------------------------------------------------------------*/void ms_delete (MEMSYS *ms){ MSBLOCK *block; assert(ms); while (ms->blocks) { block = ms->blocks; ms->blocks = block->succ; free(block); } free(ms); } /*--------------------------------------------------------------------*/void* ms_alloc (MEMSYS *ms){ int i; void **obj, **tmp; MSBLOCK *block; assert(ms); obj = ms->free; if (!obj) { block = (MSBLOCK*)malloc(ms->blksz); if (!block) return NULL; block->succ = ms->blocks; ms->blocks = block; ms->free = obj = (void*)(block +1); for (i = ms->cnt; --i > 0; ) { tmp = obj; *tmp = obj += ms->size; } *obj = NULL; obj = ms->free; } ms->free = *obj; return (void*)obj; } /*--------------------------------------------------------------------*/void ms_free (MEMSYS *ms, void *obj){ assert(ms && obj); *(void**)obj = ms->free; ms->free = obj; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -