在C中使用结构

cya*_*yan 7 c malloc struct

我正在阅读关于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 {

    /* 
        ....
    */

    }
}
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 6

ptr被称为柔性阵列构件; 它是一个没有大小的数组,只能出现在一个结尾处struct.

基本上这个:

return flag_block->ptr;
Run Code Online (Sandbox Code Playgroud)

相当于

return &flag_block->ptr[0];
Run Code Online (Sandbox Code Playgroud)

所以它返回了其余成员之后的第一个字节的地址struct.