list_insert(active, node);插入操作
list_remove(active);删除操作
这是两个宏定义:
# list_insert(node, po) do { \
node->ref = po->ref; \
*node->ref = node; \
node->next = po; \
po->ref = &node->next; \
} while (0)
/* list_remove removes 'node' from its list. */
# list_remove(node) do { \
*node->ref = node->next; \
node->next->ref = node->ref; \
} while (0)
在宏定义中list_insert操作是向链表中po结点后面插入个结点
node->ref = po->ref;
当链表中只有个结点时这时
上图是内存池时链表状态ref指向是next即ref=&next.
运行list_insert(node,po)后:
运行list_insert(node1, node)后:
从图3可以看出ref实际上是指向上结点next地址而next实际上又指向结点自身通过这个指针链表就可以很方便地添加和删除每个结点删除操作比较简单就不做多解释了
TAG: Apache apache 内存 结点
最新评论