gpt4 book ai didi

c - 在c中实现内存池

转载 作者:太空宇宙 更新时间:2023-11-04 04:44:19 27 4
gpt4 key购买 nike

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

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的 block ,所以

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));

现在我想使用 block b的内存,所以我就把它当作

strcpy(b, "hello, world!");

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

最佳答案

在下面

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

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

p+1

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

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

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

关于c - 在c中实现内存池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22740580/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com