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

📄 tmalloc.c

📁 使用BorlandC++4.5编译的一个MUD客户端程序
💻 C
字号:
/* tmalloc.c: Tray memory allocator */
/* $Id: tmalloc.c 2.1 1995/10/24 15:46:14 tsurace Release $ */

#include <stdio.h>
#include <sys/types.h>
#include "vt.h"

typedef long Align;
typedef union tlist {
	union tlist *next;
	Align a;
} Tlist;

#define TRAY_INC sizeof(Tlist)
#define NUM_TRAYS 4
#define MAX_USE_TRAY (NUM_TRAYS * TRAY_INC)
#define TRAY_ELEM 512
#define TRAY_SIZE (TRAY_ELEM * TRAY_INC)

static Tlist *trays[NUM_TRAYS];

char *tmalloc(size)
	size_t size;
{
	int t, n, i, max_elem;
	char *p;

	if (size > MAX_USE_TRAY)
		return malloc(size);
	t = (size - 1) / TRAY_INC;
	if (!trays[t]) {
		n = t + 1;
		trays[t] = (Tlist *) malloc(TRAY_SIZE);
		if (!trays[t])
			return NULL;
		max_elem = TRAY_ELEM - 2 * n;
		for (i = 0; i <= max_elem; i += n)
			trays[t][i].next = &trays[t][i + n];
		trays[t][i].next = NULL;
	}
	p = (char *) trays[t];
	trays[t] = trays[t]->next;
	return p;
}

void tfree(ptr, size)
	char *ptr;
	size_t size;
{
	int t;

	if (size > MAX_USE_TRAY) {
		free(ptr);
		return;
	}
	t = (size - 1) / TRAY_INC;
	((Tlist *) ptr)->next = trays[t];
	trays[t] = (Tlist *) ptr;
}

char *trealloc(ptr, oldsize, newsize)
	char *ptr;
	size_t oldsize, newsize;
{
	char *new;

	if (oldsize > MAX_USE_TRAY && newsize > MAX_USE_TRAY)
		return realloc(ptr, newsize);
	new = tmalloc(newsize);
	bcopy(ptr, new, oldsize);
	tfree(ptr, oldsize);
	return new;
}


⌨️ 快捷键说明

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