## php 内存分配新 转

o
osc_y8yehimr

https://yq.aliyun.com/articles/38307

https://yq.aliyun.com/ziliao/132720

http://blog.liyiwei.cn/%E3%80%8A%E7%AE%97%E6%B3%95%E5%AF%BC%E8%AE%BA%E3%80%8B%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0%EF%BC%9A%E4%BA%8C%E5%8F%89%E6%9F%A5%E6%89%BE%E6%A0%91/

1）查找右子树中最小的结点a，特点就是该 结点 没有 左子树， 假设a的右子树为b,a的父结点为c,那么 c.左子树为b,同时b的父结点为c

2)查找左子树中最大的结点a,特点是该结点没有 右子树，只有左子树，假设 a的左子树为b, a的父结点为c,那么 c的左子树为b,同时b的父结点为c

160

/

92

/\

84　98

/\    /\

76  86  96 106

\

97

160

/

96

/\

84　98

/\    /\

76  86  97 106

``````static inline void zend_mm_remove_from_free_list(zend_mm_heap *heap, zend_mm_free_block *mm_block)
{
zend_mm_free_block *prev = mm_block->prev_free_block;
zend_mm_free_block *next = mm_block->next_free_block;

ZEND_MM_CHECK_MAGIC(mm_block, MEM_BLOCK_FREED);

if (EXPECTED(prev == mm_block)) {
zend_mm_free_block **rp, **cp;

rp = &mm_block->child[mm_block->child[1] != NULL];
prev = *rp;
if (EXPECTED(prev == NULL)) {

} else {
while (*(cp = &(prev->child[prev->child[1] != NULL])) != NULL) {
prev = *cp;
rp = cp;
}
*rp = NULL;

subst_block:
ZEND_MM_CHECK_TREE(mm_block);
*mm_block->parent = prev;
prev->parent = mm_block->parent;
if ((prev->child[0] = mm_block->child[0])) {
ZEND_MM_CHECK_TREE(prev->child[0]);
prev->child[0]->parent = &prev->child[0];
}
if ((prev->child[1] = mm_block->child[1])) {
ZEND_MM_CHECK_TREE(prev->child[1]);
prev->child[1]->parent = &prev->child[1];
}
}
}
}``````

160

/

92

/\

84　98

/\    /\

76    96 106

rp = &mm_block->child[mm_block->child[1] != NULL]; rp为92的右子树，即98的地址

prev = *rp; prev为8

``````while (*(cp = &(prev->child[prev->child[1] != NULL])) != NULL) {
prev = *cp;
rp = cp;
}``````

while( *(cp = &98[1]) != NULL){

prev = 106;

}

``````prev->parent = mm_block->parent;
if ((prev->child[0] = mm_block->child[0])) {
ZEND_MM_CHECK_TREE(prev->child[0]);
prev->child[0]->parent = &prev->child[0];
}
if ((prev->child[1] = mm_block->child[1])) {
ZEND_MM_CHECK_TREE(prev->child[1]);
prev->child[1]->parent = &prev->child[1];
}    ``````

106的父结点 是92的父结点，即106的父结点是160

106的左了树为 92的左子树 即 106的左子结点为84

106的右子树为 92的右子结，即106的右子结点 为98， 是不是不太对劲，这不符合二叉排序树的规则，因为右子树要大于他的父结点的

160

/

106

/\

84　98

/\    /\

76    96

o

### osc_y8yehimr

2013/11/09
8K
8
opm-server-mirror

luosheng86
2013/01/29
1K
0
tiny php template--TPT

2013/03/03
1K
1
PHP web 服务器--YACS

YACS 是一个强大的 PHP 脚本，可以让你维护一个动态的 Web 服务器。 特性： - Runs on your own server, or on a shared web site - Post articles with web forms, by e-mail, or remotely ......

2013/03/18
864
0

Raw-OS 起飞于2012年，Raw-OS志在制作中国人自己的最优秀硬实时操作系统。 Raw-OS 操作系统特性 内核最大关中断时间无限接近0us, s3c2440系统最大关中断时间实测0.8us。 支持idle任务级别的事...

jorya_txj
2013/03/19
6.4K
1

osc_npw5uz1o
10分钟前
0
0

osc_z9ptnny9
12分钟前
0
0

1 mysql启动 Failed to start mysqld.service: Unit not found. 2 查询/etc/init.d/下是否存在mysqld ll /etc/init.d/ | grep mysqld 发现该目录下并没有mysqld的文件，若存在，请备份一下 ...

osc_um3gbrdm
14分钟前
5
0

14分钟前
0
0
Java并发编程：volatile关键字解析

Java并发编程：volatile关键字解析 　　 volatile这个关键字可能很多朋友都听说过，或许也都用过。在Java 5之前，它是一个备受争议的关键字，因为在程序中使用它往往会导致出人意料的结果。在...

osc_3r4js8qy
15分钟前
13
0