【发布时间】:2017-02-01 13:16:32
【问题描述】:
要重新编码 malloc 函数,我执行 sbrk(stack) where :
void *malloc(size_t size)
{
stack = 0;
while (stack < size)
stack += 4096;
}
我的 malloc 总是比我需要的多,然后我想取一些分配的大小为 size 的区域并返回它,如果我想在我已经分配内存之后再做一次 malloc,所以我不必做多个sbrk 的呼唤。
我该怎么做,我试着用 brk(start_of_the_allocated_space) , sbrk(size) 返回我需要的空间的开始和结束,但它是段错误。
编辑:
struct s_block {
size_t size;
struct s_block *next;
struct s_block *prev;
void *start;
void *end;
}
这是我的结构。 然后我有一个创建块的函数
struct s_block *create_block(size_t size, unsigned int stack)
{
struct s_block *block;
block = sbrk(sizeof(s_block));
block->start = sbrk(stack);
block->size = stack;
block->end = sbrk(0);
block->next = set_free_space(size, block);
block->size -= size;
block->next->prev = block;
block->prev = NULL;
return (block->next);
}
struct s_block *set_free_space(size_t size, struct s_block *block)
{
struct s_block new_block;
new_block = sbrk(sizeof(s_block));
new_block->start = block->start;
new_block->next = NULL;
new_block->size = size;
new_block->end = ???; // this is where I want to split the first sbrk
// I tried new_block->end = new_block->start + size; but it doesn't work either
block->start = new_block->end + 1; // and i set the new start of the big block at the end of the one i use
return (new_block);
}
【问题讨论】:
-
如果你
#include <stdlib.h,名称malloc是保留的,不能被用户代码使用。使用不同的名称。 -
stdlib.h当然不包括在内 -
因为我的程序中没有包含它。
-
1) 正确的大写字母使阅读帖子更容易。是“我”,不是“我”。拼写错误并不酷。类似于使用降价 2) 你 没有包括它 - 确定不是间接的吗?并确定它没有链接?请参阅How to Ask,提供minimal reproducible example 和所有相关信息。
-
这个代码段没有头没有尾,你能显示完整的功能吗?如果我们不知道您在问什么,我们将无法回答问题。