我正在阅读关于malloc(first-fit)实现的脚本,我对元数据结构的值赋值有点困惑.任何人都可以解释为什么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 { /* .... */ } }
解决方法
ptr被称为灵活的阵列成员;它是一个没有大小的数组,只能出现在结构的末尾.
基本上这个:
return flag_block->ptr;
相当于
return &flag_block->ptr[0];
所以它返回结构中其余成员之后的第一个字节的地址.