ret = extent_node_addr_get(node); /* node 中用于分配内存的起始地址 */ if (extent_node_size_get(node) > csize) { extent_node_addr_set(node, (void *)((uintptr_t)ret + csize)); /* 起始地址增加 csize,表明之前的内存被分配出去 */ extent_node_size_set(node, extent_node_size_get(node) - csize); /* 内存大小减少 */ extent_tree_szad_insert(&base_avail_szad, node); /* 按照大小、地址顺序插入到红黑树 */ } else /* 这种情况只发生在 extent_node_size_get(node) == csize 这种情况。 * 此时该 node 负责的内存已经全部分配了,会将该 node 插入到一个链表中去,备用。 * 该链表用嵌入式实现,在 node 的起始内存存放下一个 node 的地址,节省空间 */ base_node_dalloc(node);