⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rb_mem.c

📁 redboy for gba 是BPNS为GBA编写的一个小软件。软件的邹形是BASIC高级语言解释执行器。几经修改和扩展
💻 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 + -