我对内存池的实现感到困惑。我创建了一个内存池:
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!");我做得对吗?我如何解决这个问题?
发布于 2014-03-30 15:23:04
在下面的代码中
b=(block *)&p[block_size+sizeof(block)];p是一个指向pool的指针,所以当您对它使用数组索引时,偏移量将乘以pool结构的大小。这可能不是您想要的。您可能希望跳过池结构,这将是
p+1我不知道您打算使用什么策略来划分池头之后的内存,也不知道您打算如何处理对齐要求,所以我不能说您还需要什么额外的偏移量。
接下来,在块结构中填入块大小,然后使用memset清除整个块。
因此,在不知道您正在尝试实现哪种类型的池分配器的情况下,我所能做的最多就是回答您的实际问题,而答案是否定的,您没有正确地这样做。
https://stackoverflow.com/questions/22740580
复制相似问题