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

📄 smalloc.c

📁 source code of armboot for s3c4510
💻 C
字号:
/* smalloc.c: simple malloc using a heap that grows down * */#ifdef DEBUG#define dprintf(arg...) printf(arg)#else#define dprintf(arg...)#endif/* very simple.  At the beginning of the block is the size.   That's all.  We keep track of the bottom and the absolute   bottom.  A zero size block marks the top, size -ve is free */int * last_block;int * bottom;int smalloc_init(void * mem, int size){	bottom = (int *)(((int)mem + 3) & ~0x3);	last_block = (int *)(((int)mem + size - 1) & ~0x3);	*last_block = 0;}void *smalloc_malloc(int size){  int * p;  for (p=last_block; *p; p += (*p < 0) ? -*p : *p) {    if (*p > 0) continue;    if (size > (-*p)<<1 && (size + 4) <= ((-*p) << 2)) { /* up to 2 times */      *p = -(*p);      dprintf("reuse of %d(%d)\n",size,*p*4);      return p+1;    }  }  /* nothing matches */  p = last_block - ((size + 3) >> 2) - 1;  *p = last_block - p;  last_block = p;  dprintf("new of %d.  %d free\n", size, (int)(last_block - bottom) * 4);  return p+1;}intsmalloc_free(void *ptr){  int * p = ptr;  if (!ptr) return 0;  p--;  dprintf("free %d\n",*p * 4);  *p = -(*p);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -