我正在阅读有关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 {
/*
....
*/
}
}
答案 0 :(得分:6)
["true, true, true, true, true, true, true, true, true, ","true, true, true, true, true, true, true, false, false, "]
被称为灵活的阵列成员;它是一个没有大小的数组,只能出现在String facilitiesStr = (request.getParameter("jsFacilitiesArray")).replace(", \"]","").replace("[\"","");
String[] facArr = facilitiesStr.split("\",\"");
//out.println(facArr);
for (int i = 0; i < facArr.length; i++) {
out.println( facArr[i] + " NEXT ");
}
的末尾。
基本上就是这样:
ptr
相当于
struct
所以它返回return flag_block->ptr;
中其他成员之后的第一个字节的地址。