내로는 sbrk를 spliting, 내가 않는 sbrk(stack)
: 나는 내가 크기 size
이 할당 된 영역의 일부를 가지고 그것을 반환 할 다음 필요한 것보다 항상 더 malloc에 malloc이 함수를 코딩하기 위해 2
void *malloc(size_t size)
{
stack = 0;
while (stack < size)
stack += 4096;
}
, 그리고 이미 메모리를 할당 한 후에 다른 malloc을 원한다면 sbrk를 여러 번 호출해야합니다. 어떻게 할 수 있습니까, 내가 다시 시도하고 내가 필요한 공간의 끝을 가지고 brk(start_of_the_allocated_space)
, sbrk(size)
하려고했지만 segfault.
편집 :
struct s_block {
size_t size;
struct s_block *next;
struct s_block *prev;
void *start;
void *end;
}
가 여기 내 구조입니다. 그럼 제가 질문을 이해한다면, 당신이 하나의 큰 sbrk()
을하고 싶은 것하고 malloc에 새로운 조각 매번 당신을 분할 한 블록을
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
Olaf
'stdlib.h'는 물론 포함되지 않습니다 –
당신은 어떻게 압니까? – Olaf