Skip to content

Commit 0827774

Browse files
committed
update
1 parent 3581e19 commit 0827774

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

img/free_slot.png

21 KB
Loading

zend_alloc.md

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,43 @@ page分配完成后会将free_map对应整数的bit位从page_num至(page_num+pa
267267
#### 5.1.3.3 Small分配
268268
small内存指的是小于(3/4 page_size)的内存,这些内存首先也是申请了1个或多个page,然后再将这些page按固定大小切割了,所以第一步与上一节Large分配完全相同。
269269
270-
small内存总共有30种固定大小的规格:8,16,24,32,40,48,56,64,80,96,112,128 ... 1792,2048,2560,3072。
270+
small内存总共有30种固定大小的规格:8,16,24,32,40,48,56,64,80,96,112,128 ... 1792,2048,2560,3072 Byte,我们把这称之为slot,这些slot的大小是有规律的:最小的slot大小为8byte,前8个slot__依次递增8byte__,后面每隔4个递增值乘以2,即`slot 0-7递增8byte、8-11递增16byte、12-15递增32byte、16-19递增32byte、20-23递增128byte、24-27递增256byte、28-29递增512byte`,每种大小的slot占用的page数分别是:slot 0-15各占1个page、slot 16-29依次占5, 3, 1, 1, 5, 3, 2, 2, 5, 3, 7, 4, 5, 3个page,这些值定义在`zend_alloc_sizes.h`中:
271+
272+
```c
273+
/* num, size, count, pages */
274+
#define ZEND_MM_BINS_INFO(_, x, y) \
275+
_( 0, 8, 512, 1, x, y) \ //四个值的含义依次是:slot编号、slot大小、slot数量、占用page数
276+
_( 1, 16, 256, 1, x, y) \
277+
_( 2, 24, 170, 1, x, y) \
278+
_( 3, 32, 128, 1, x, y) \
279+
_( 4, 40, 102, 1, x, y) \
280+
_( 5, 48, 85, 1, x, y) \
281+
_( 6, 56, 73, 1, x, y) \
282+
_( 7, 64, 64, 1, x, y) \
283+
_( 8, 80, 51, 1, x, y) \
284+
_( 9, 96, 42, 1, x, y) \
285+
_(10, 112, 36, 1, x, y) \
286+
_(11, 128, 32, 1, x, y) \
287+
_(12, 160, 25, 1, x, y) \
288+
_(13, 192, 21, 1, x, y) \
289+
_(14, 224, 18, 1, x, y) \
290+
_(15, 256, 16, 1, x, y) \
291+
_(16, 320, 64, 5, x, y) \
292+
_(17, 384, 32, 3, x, y) \
293+
_(18, 448, 9, 1, x, y) \
294+
_(19, 512, 8, 1, x, y) \
295+
_(20, 640, 32, 5, x, y) \
296+
_(21, 768, 16, 3, x, y) \
297+
_(22, 896, 9, 2, x, y) \
298+
_(23, 1024, 8, 2, x, y) \
299+
_(24, 1280, 16, 5, x, y) \
300+
_(25, 1536, 8, 3, x, y) \
301+
_(26, 1792, 16, 7, x, y) \
302+
_(27, 2048, 8, 4, x, y) \
303+
_(28, 2560, 8, 5, x, y) \
304+
_(29, 3072, 4, 3, x, y)
305+
```
306+
![free_slot](img/free_slot.png)
271307

272308
### 5.1.4 内存释放
273309

0 commit comments

Comments
 (0)