apache内存:Apache内存池中分配结点补充介绍说明

tingyablog代码:

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指向nextref=&next.

运行list_insert(node,po):

 

运行list_insert(node1, node):





从图3可以看出ref实际上是指向上结点next地址next实际上又指向结点自身通过这个指针链表就可以很方便地添加和删除每个结点删除操作比较简单就不做多解释了

 

TAG: Apache apache 内存 结点


Tags:  内存分配失败 内存分配 内存分配访问无效 apache内存

延伸阅读

最新评论

发表评论