Skip to content

Commit 880594d

Browse files
committed
update
1 parent 7cbd261 commit 880594d

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

zend_alloc.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
## 5.1 Zend内存池
2-
zend针对内存的操作封装了一层,实现了更高效率的内存利用,其实现主要参考了tcmalloc的设计。
2+
zend针对内存的操作封装了一层,用于替换直接的内存操作:malloc、free等,实现了更高效率的内存利用,其实现主要参考了tcmalloc的设计。
33

4-
zend内存池有两种粒度的内存块:chunk、page,每个chunk的大小为2M,page大小为4KB,一个chunk被切割为512个page,申请内存时按照三种情况处理:
4+
源码中emalloc、efree、estrdup等等就是内存池的操作。
5+
6+
内存池是内核中最底层的内存操作,定义了三种粒度的内存块:chunk、page、slot,每个chunk的大小为2M,page大小为4KB,一个chunk被切割为512个page,而一个或若干个page被切割为多个slot,所以申请内存时按照不同的申请大小决定具体的分配策略:
57
* __Huge(chunk):__ 申请内存大于2M,直接调用系统分配,分配若干个chunk
68
* __Large(page):__ 申请内存大于3092B(3/4 page_size),小于2044KB(511 page_size),分配若干个page
79
* __Small(slot):__ 申请内存小于等于3092B(3/4 page_size),内存池提前定义好了30种同等大小的内存(8,16,24,32,...3072),他们分配在不同的page上(不同大小的内存可能会分配在多个连续的page),申请内存时直接在对应page上查找可用位置

0 commit comments

Comments
 (0)