【发布时间】:2014-05-09 13:16:06
【问题描述】:
我对内存池的实现感到困惑。我创建了一个内存池:
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!");
我做得对吗?我该如何解决这个问题?
【问题讨论】:
-
什么是
pool?那是struct吗? -
是的,它是一个结构体,包含一些关于池大小、池 id 和指向下一个池的指针的信息。块也是一个结构体。
-
你需要更多地描述你的结构 & 我希望你知道这一点 -
p这里是一个指针,sizeof(pool)是指针的大小而不是块的大小pool指向,与sizeof(block)相同。 -
你想实现什么样的内存池?