首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用c实现内存池

用c实现内存池
EN

Stack Overflow用户
提问于 2014-03-30 13:22:34
回答 1查看 1.2K关注 0票数 1

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

代码语言:javascript
复制
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将这个内存池划分为多个块,所以

代码语言:javascript
复制
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的内存,所以我只是把它当作

代码语言:javascript
复制
strcpy(b, "hello, world!");

我做得对吗?我如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2014-03-30 15:23:04

在下面的代码中

代码语言:javascript
复制
b=(block *)&p[block_size+sizeof(block)];

p是一个指向pool的指针,所以当您对它使用数组索引时,偏移量将乘以pool结构的大小。这可能不是您想要的。您可能希望跳过池结构,这将是

代码语言:javascript
复制
p+1

我不知道您打算使用什么策略来划分池头之后的内存,也不知道您打算如何处理对齐要求,所以我不能说您还需要什么额外的偏移量。

接下来,在块结构中填入块大小,然后使用memset清除整个块。

因此,在不知道您正在尝试实现哪种类型的池分配器的情况下,我所能做的最多就是回答您的实际问题,而答案是否定的,您没有正确地这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22740580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档