在c中实现内存池

时间:2014-03-30 05:22:34

标签: c memory pool

我对内存池实现感到困惑。我创建了一个内存池:

typedef struct POOL
{
  struct POOL *p_next;
  unsigned short size;
  unsigned short used;
}pool;

pool *p;
p=malloc(pool_size+sizeof(pool));
p->size= pool_size;
p->used= 0;

现在我想用block_size将这个内存池分成块,所以

typedef struct BLOCK
{
 unsigned short size;
 struct BLOCK *b_next;
}block;

block *b=NULL;
b=(block *)&p[block_size+sizeof(block)];
b->size=block_size;
memset(b,0,size+sizeof(block));
p->used+=(size+sizeof(block));

现在我想使用块b的内存,所以我只是用它作为

strcpy(b, "hello, world!");
我正确地做到了吗?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

以下

b=(block *)&p[block_size+sizeof(block)];

p是指向pool的指针,因此当您对其使用数组索引时,偏移量将乘以pool结构的大小。这可能不是你想要的。您可能想要跳过池结构,这只是

p+1

我不知道你打算用什么政策来分割池头之后的内存,或者你打算如何处理对齐要求,所以我不能说你还需要什么额外的补偿

接下来,在块结构中填写块大小,然后使用memset继续擦除整个内容。

因此,在不知道您尝试实现哪种池分配器的情况下,我能做的最好的就是回答您的实际问题,答案是否定的,您没有正确地执行此操作。