我正在尝试实现一个init_allocator()
函数,该功能初始化了内存分配器,并使_length
字节的一部分可用。分配器使用_basic_block_size
作为其最小分配单位。该功能返回分配器可用的内存量。如果发生错误,它将返回0
。
这是我到目前为止所拥有的:
int memAvail; // amount of memory to be made available to allocator
unsigned int init_allocator(unsigned int _basic_block_size, unsigned int _length){
if (_basic_block_size < _ length){
memAvail = _length/_basic_block_size;
return memAvail;
}
else{
return 0;
}
}
我不知道这是否是正确的实现,但对我来说似乎是正确的。我做错了吗?我应该使用指针吗?任何建议都将不胜感激。
这是kernighan和ritchie
的第5.4章的示例内存分配器#include<stdio.h>
#define ALLOCSIZE 10000
static char allocbuf[ALLOCSIZE];
static char *allocp=allocbuf;
/* Return pointer to n characters */
char *alloc(int n)
{
if(allocbuf+ALLOCSIZE-allocp>=n){
// It fits
allocp+=n;
return allocp-n;
}else
// Not enough room
return 0;
}
allocbuf
是存储信号的内存缓冲区,因为这是炭分配器。*alloccp
是指向下一个自由位置的指针,最初是allocbuf
的第一个(即0th)元素。*alloc
返回一个指针,转到allocbuf
中的第一个位置,该程序将存储n
字符。
这可以很容易地将其转换为其他数据类型,它演示了可能的简单分配器设计的原理。澄清您的要求,我可以添加内容。