我正在阅读有关实现malloc
(首次适应)的脚本,对元数据结构中值的赋值有些困惑。是否有人可以解释一下为什么malloc
返回flag_block->ptr
(作为分配内存的指针)?据我所见,没有特定的赋值给它。
typedef struct _metadata {
size_t size;
char free;
struct _metadata* next;
struct _metadata* prev;
char ptr[];
} metadata;
metadata* flag_block = NULL;
void *malloc(size_t size)
{
if (size==0) {
return NULL;
}
if (flag_block == NULL) {
flag_block = sbrk(size);
sbrk(sizeof(metadata));
if (flag_block == (void *)-1) {
return NULL;
}
flag_block->free = 0;
flag_block->next=NULL;
flag_block->prev=NULL;
flag_block->size = size;
return flag_block->ptr;
} else {
/*
....
*/
}
}
sbrk(sizeof(metadata));
的返回值。 - chux - Reinstate Monicachar ptr[];
的类型除了它的对齐方式外并不重要。malloc()
应该返回一个在所有上下文中都有效的指针对齐方式。而char ptr[];
并不能提供这种对齐方式。替代方案是:使用max_align_t ptr[]
。 - chux - Reinstate Monica