static extent_node_t * base_node_try_alloc(void) { extent_node_t *node; if (base_nodes == NULL) return (NULL); // 返回链表头 node = base_nodes; // base_nodes 指向下一个 node base_nodes = *(extent_node_t **)node; JEMALLOC_VALGRIND_MAKE_MEM_UNDEFINED(node, sizeof(extent_node_t)); return (node); } /* base_mtx must be held. */ static void base_node_dalloc(extent_node_t *node) { JEMALLOC_VALGRIND_MAKE_MEM_UNDEFINED(node, sizeof(extent_node_t)); // 将 base_nodes 指向的地址保存在 node 的指向的内存起始处 // 形成一个 node 的链表,base_nodes 指向链表头,内存起始处为 // 下一个 node 的地址 *(extent_node_t **)node = base_nodes; base_nodes = node; }