📄 rb_mem.c
字号:
#include <CsAgb.h>
#include <malloc.h>
#define MSTRT 0x02002000 //内存基址
#define MEND 0x02040000 //内存尾地址
#define MUTS (MUT_DAT *)0x02000000 //内存分配表
typedef struct
{
void *loc;//首地址
u32 size;//分配大小
} MUT_DAT;
void *mymalloc(u32 size)
{
return malloc(size);
}
void myfree(void *loc)
{
if (loc) free(loc);
loc=NULL;
}
void *new_malloc(u32 size)
{
int i,j;
u32 loc=MSTRT;
if (size==0) return NULL;;
if (size&0x3) size=size-(size&0x3)+4;//分配个数为四的倍数(四字节齐)
for (i=0;i<1024;i++)//最多能将内存分配为1024个块
{
if (((u32)(MUTS+i)->loc)>=(loc+size) || (MUTS+i)->loc==NULL) break;//找到空闲空间
loc=(MUTS+i)->size+(u32)(MUTS+i)->loc;
}
if (i==1024 || loc+size>=MEND) return NULL;//分配失败
for (j=1023;j>i;j--) *(MUTS+j)=*(MUTS+(j-1));
(MUTS+i)->size=size;
(MUTS+i)->loc=(void *)loc;
return (void *)loc;
}
void new_free(void *loc)
{
int i,j;
if (loc==NULL) return;
for (i=0;i<1024;i++) if ((MUTS+i)->loc==loc) break;//找到分配块
if (i==1024) return;
loc=NULL;//释放空间
for (j=i;j<1023;j++) *(MUTS+j)=*(MUTS+(j+1));
(MUTS+j)->loc=NULL;
(MUTS+j)->size=0;
}
void mem_init()//初始化
{
int i;
//return;
for (i=0;i<1024;i++)
{
(MUTS+i)->loc=NULL;
(MUTS+i)->size=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -