memmgmt.c
来自「用C++编写的一个编译器」· C语言 代码 · 共 92 行
C
92 行
#include <stdlib.h>
#include <string.h>
#include "utility.h"
#include "symbol.h"
static Memblk *gblk_list, *lblk_list;
void *dmalloc(int size, bool auto_flag)
{
Memblk *blklist, *tmpblk;
int rsize, offset;
if(!current_func||!auto_flag)
blklist = gblk_list;
else
blklist = lblk_list;
if(!blklist||blklist->rest<size)
{
rsize=PAGESIZE>sizeof(Memblk)+size?PAGESIZE:sizeof(Memblk)+size;
tmpblk=(Memblk*)malloc(rsize);
memset(tmpblk, 0, rsize);
tmpblk->blksize = rsize;
tmpblk->rest = rsize-sizeof(Memblk);
tmpblk->next = blklist;
blklist = tmpblk;
}
offset = blklist->blksize-blklist->rest;
blklist->rest-=size;
return ((char*)blklist)+offset;
}
int release_local()
{
int sum=0;
Memblk *blklist, *tmpblk;
blklist = lblk_list;
lblk_list=NULL; //set pointer to zero
while(NULL != blklist)
{
tmpblk=blklist;
blklist=blklist->next;
sum+=tmpblk->blksize;
free(tmpblk);
}
return sum;
}
int release_global()
{
int sum=0;
Memblk *blklist, *tmpblk;
blklist = gblk_list;
gblk_list=NULL; //set pointer to zero
while(NULL != blklist)
{
tmpblk=blklist;
blklist=blklist->next;
sum+=tmpblk->blksize;
free(tmpblk);
}
return sum;
}
char * newstrcpy(
const char *src,
int size)
{
int i;
char *des;
if(size == UNKNOWN)
size = strlen(src)+1;
des = dmalloc(size, true);
for(i=0;i<size;i++)
des[i] = src[i];
return des;
}
long align_add(
long origin,
long extra
)
{
if(extra==1)
return origin+extra;
else if(extra==2)
return ((origin+1)&~1)+extra;
else
return ((origin+3)&~3)+extra;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?