PHP内存管理ZMM(二)-常见宏的值
source link: https://petrie.github.io/post/2018-04-09-normal-zend-macro-value/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
PHP内存管理ZMM(二)-常见宏的值
相关宏的定义
64位系统非debug模式编译后的
#define ZEND_MM_ALIGNMENT 8
#define ZEND_MM_ALIGNMENT_LOG2 3
#define ZEND_MM_MIN_SIZE ((ZEND_MM_ALIGNED_MIN_HEADER_SIZE>(ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE))?(ZEND_MM_ALIGNED_MIN_HEADER_SIZE-(ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE)):0)
#define ZEND_MM_MAX_SMALL_SIZE ((ZEND_MM_NUM_BUCKETS<<ZEND_MM_ALIGNMENT_LOG2)+ZEND_MM_ALIGNED_MIN_HEADER_SIZE)
#define ZEND_MM_ALIGNED_HEADER_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_block))
#define ZEND_MM_ALIGNED_FREE_HEADER_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_small_free_block))
#define ZEND_MM_MIN_ALLOC_BLOCK_SIZE ZEND_MM_ALIGNED_SIZE(ZEND_MM_ALIGNED_HEADER_SIZE + END_MAGIC_SIZE)
#define ZEND_MM_ALIGNED_MIN_HEADER_SIZE (ZEND_MM_MIN_ALLOC_BLOCK_SIZE>ZEND_MM_ALIGNED_FREE_HEADER_SIZE?ZEND_MM_MIN_ALLOC_BLOCK_SIZE:ZEND_MM_ALIGNED_FREE_HEADER_SIZE)
#define ZEND_MM_ALIGNED_SEGMENT_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_segment))
#define ZEND_MM_TRUE_SIZE(size) ((size<ZEND_MM_MIN_SIZE)?(ZEND_MM_ALIGNED_MIN_HEADER_SIZE):(ZEND_MM_ALIGNED_SIZE(size+ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE)))
#define ZEND_MM_SMALL_SIZE(true_size) (true_size < ZEND_MM_MAX_SMALL_SIZE)
#define ZEND_MM_BUCKET_INDEX(true_size) ((true_size>>ZEND_MM_ALIGNMENT_LOG2)-(ZEND_MM_ALIGNED_MIN_HEADER_SIZE>>ZEND_MM_ALIGNMENT_LOG2))
下面依次解释各个宏的含义和作用
- ZEND_MM_ALIGNMENT
内存对齐的时候用到,值为8,无特别的逻辑含义
- ZEND_MM_ALIGNMENT_LOG2
辅助内存对齐的时候用到,值为3,无特别的逻辑含义
- ZEND_MM_MIN_SIZE
值为两个指针的长度,值为16
- ZEND_MM_MAX_SMALL_SIZE
小内存块的大小上限,值为544,用于判断但前大小的内存该放入哪种区域(大小内存块)
- ZEND_MM_ALIGNED_HEADER_SIZE
结构体zend_mm_block
占用内存大小,值为16,无特别的逻辑含义
- ZEND_MM_ALIGNED_FREE_HEADER_SIZE
结构体zend_mm_small_free_block
占用内存大小,值为32,无特别的逻辑含义
- ZEND_MM_MIN_ALLOC_BLOCK_SIZE
此宏值和ZEND_MM_ALIGNED_HEADER_SIZE一致,值为16,无特别逻辑含义
- ZEND_MM_ALIGNED_MIN_HEADER_SIZE
取ZEND_MM_MIN_ALLOC_BLOCK_SIZE、ZEND_MM_ALIGNED_FREE_HEADER_SIZE中较大的值,值为32,后续计算true_size是会用到。
- ZEND_MM_TRUE_SIZE
如果传入size小于等于16,则返回32。否则返回内存对齐后的size+16
Zend中打印宏的值
代码逻辑见如下:
https://github.com/php/php-src/blob/PHP-5.6.34/Zend/zend_alloc.c#L1050
printf("ZEND_MM_ALIGNMENT=%d\n", ZEND_MM_ALIGNMENT);
printf("ZEND_MM_ALIGNMENT_LOG2=%d\n", ZEND_MM_ALIGNMENT_LOG2);
printf("ZEND_MM_MIN_SIZE=%d\n", ZEND_MM_MIN_SIZE);
printf("ZEND_MM_MAX_SMALL_SIZE=%d\n", ZEND_MM_MAX_SMALL_SIZE);
printf("ZEND_MM_ALIGNED_HEADER_SIZE=%d\n", ZEND_MM_ALIGNED_HEADER_SIZE);
printf("ZEND_MM_ALIGNED_FREE_HEADER_SIZE=%d\n", ZEND_MM_ALIGNED_FREE_HEADER_SIZE);
printf("ZEND_MM_MIN_ALLOC_BLOCK_SIZE=%d\n", ZEND_MM_MIN_ALLOC_BLOCK_SIZE);
printf("ZEND_MM_ALIGNED_MIN_HEADER_SIZE=%d\n", ZEND_MM_ALIGNED_MIN_HEADER_SIZE);
printf("ZEND_MM_ALIGNED_SEGMENT_SIZE=%d\n", ZEND_MM_ALIGNED_SEGMENT_SIZE);
for (i = 0; i < ZEND_MM_MAX_SMALL_SIZE; i++) {
printf("%3d%c: %3ld %d %2ld\n",
i,
(i == ZEND_MM_MIN_SIZE?'*':' '),
(long)ZEND_MM_TRUE_SIZE(i),
ZEND_MM_SMALL_SIZE(ZEND_MM_TRUE_SIZE(i)),
(long)ZEND_MM_BUCKET_INDEX(ZEND_MM_TRUE_SIZE(i)));
}
在64位系统执行后:
ZEND_MM_ALIGNMENT=8
ZEND_MM_ALIGNMENT_LOG2=3
ZEND_MM_MIN_SIZE=16
ZEND_MM_MAX_SMALL_SIZE=544
ZEND_MM_ALIGNED_HEADER_SIZE=16
ZEND_MM_ALIGNED_FREE_HEADER_SIZE=32
ZEND_MM_MIN_ALLOC_BLOCK_SIZE=16
ZEND_MM_ALIGNED_MIN_HEADER_SIZE=32
ZEND_MM_ALIGNED_SEGMENT_SIZE=16
0 : 32 1 0
1 : 32 1 0
2 : 32 1 0
3 : 32 1 0
4 : 32 1 0
5 : 32 1 0
6 : 32 1 0
7 : 32 1 0
8 : 32 1 0
9 : 32 1 0
10 : 32 1 0
11 : 32 1 0
12 : 32 1 0
13 : 32 1 0
14 : 32 1 0
15 : 32 1 0
16*: 32 1 0
17 : 40 1 1
18 : 40 1 1
19 : 40 1 1
20 : 40 1 1
21 : 40 1 1
22 : 40 1 1
23 : 40 1 1
24 : 40 1 1
25 : 48 1 2
26 : 48 1 2
27 : 48 1 2
28 : 48 1 2
29 : 48 1 2
30 : 48 1 2
31 : 48 1 2
32 : 48 1 2
33 : 56 1 3
34 : 56 1 3
35 : 56 1 3
36 : 56 1 3
37 : 56 1 3
38 : 56 1 3
39 : 56 1 3
40 : 56 1 3
41 : 64 1 4
42 : 64 1 4
43 : 64 1 4
44 : 64 1 4
45 : 64 1 4
46 : 64 1 4
47 : 64 1 4
48 : 64 1 4
49 : 72 1 5
50 : 72 1 5
51 : 72 1 5
52 : 72 1 5
53 : 72 1 5
54 : 72 1 5
55 : 72 1 5
56 : 72 1 5
57 : 80 1 6
58 : 80 1 6
59 : 80 1 6
60 : 80 1 6
61 : 80 1 6
62 : 80 1 6
63 : 80 1 6
64 : 80 1 6
65 : 88 1 7
66 : 88 1 7
67 : 88 1 7
68 : 88 1 7
69 : 88 1 7
70 : 88 1 7
71 : 88 1 7
72 : 88 1 7
73 : 96 1 8
74 : 96 1 8
75 : 96 1 8
76 : 96 1 8
77 : 96 1 8
78 : 96 1 8
79 : 96 1 8
80 : 96 1 8
81 : 104 1 9
82 : 104 1 9
83 : 104 1 9
84 : 104 1 9
85 : 104 1 9
86 : 104 1 9
87 : 104 1 9
88 : 104 1 9
89 : 112 1 10
90 : 112 1 10
91 : 112 1 10
92 : 112 1 10
93 : 112 1 10
94 : 112 1 10
95 : 112 1 10
96 : 112 1 10
97 : 120 1 11
98 : 120 1 11
99 : 120 1 11
100 : 120 1 11
101 : 120 1 11
102 : 120 1 11
103 : 120 1 11
104 : 120 1 11
105 : 128 1 12
106 : 128 1 12
107 : 128 1 12
108 : 128 1 12
109 : 128 1 12
110 : 128 1 12
111 : 128 1 12
112 : 128 1 12
113 : 136 1 13
114 : 136 1 13
115 : 136 1 13
116 : 136 1 13
117 : 136 1 13
118 : 136 1 13
119 : 136 1 13
120 : 136 1 13
121 : 144 1 14
122 : 144 1 14
123 : 144 1 14
124 : 144 1 14
125 : 144 1 14
126 : 144 1 14
127 : 144 1 14
128 : 144 1 14
129 : 152 1 15
130 : 152 1 15
131 : 152 1 15
132 : 152 1 15
133 : 152 1 15
134 : 152 1 15
135 : 152 1 15
136 : 152 1 15
137 : 160 1 16
138 : 160 1 16
139 : 160 1 16
140 : 160 1 16
141 : 160 1 16
142 : 160 1 16
143 : 160 1 16
144 : 160 1 16
145 : 168 1 17
146 : 168 1 17
147 : 168 1 17
148 : 168 1 17
149 : 168 1 17
150 : 168 1 17
151 : 168 1 17
152 : 168 1 17
153 : 176 1 18
154 : 176 1 18
155 : 176 1 18
156 : 176 1 18
157 : 176 1 18
158 : 176 1 18
159 : 176 1 18
160 : 176 1 18
161 : 184 1 19
162 : 184 1 19
163 : 184 1 19
164 : 184 1 19
165 : 184 1 19
166 : 184 1 19
167 : 184 1 19
168 : 184 1 19
169 : 192 1 20
170 : 192 1 20
171 : 192 1 20
172 : 192 1 20
173 : 192 1 20
174 : 192 1 20
175 : 192 1 20
176 : 192 1 20
177 : 200 1 21
178 : 200 1 21
179 : 200 1 21
180 : 200 1 21
181 : 200 1 21
182 : 200 1 21
183 : 200 1 21
184 : 200 1 21
185 : 208 1 22
186 : 208 1 22
187 : 208 1 22
188 : 208 1 22
189 : 208 1 22
190 : 208 1 22
191 : 208 1 22
192 : 208 1 22
193 : 216 1 23
194 : 216 1 23
195 : 216 1 23
196 : 216 1 23
197 : 216 1 23
198 : 216 1 23
199 : 216 1 23
200 : 216 1 23
201 : 224 1 24
202 : 224 1 24
203 : 224 1 24
204 : 224 1 24
205 : 224 1 24
206 : 224 1 24
207 : 224 1 24
208 : 224 1 24
209 : 232 1 25
210 : 232 1 25
211 : 232 1 25
212 : 232 1 25
213 : 232 1 25
214 : 232 1 25
215 : 232 1 25
216 : 232 1 25
217 : 240 1 26
218 : 240 1 26
219 : 240 1 26
220 : 240 1 26
221 : 240 1 26
222 : 240 1 26
223 : 240 1 26
224 : 240 1 26
225 : 248 1 27
226 : 248 1 27
227 : 248 1 27
228 : 248 1 27
229 : 248 1 27
230 : 248 1 27
231 : 248 1 27
232 : 248 1 27
233 : 256 1 28
234 : 256 1 28
235 : 256 1 28
236 : 256 1 28
237 : 256 1 28
238 : 256 1 28
239 : 256 1 28
240 : 256 1 28
241 : 264 1 29
242 : 264 1 29
243 : 264 1 29
244 : 264 1 29
245 : 264 1 29
246 : 264 1 29
247 : 264 1 29
248 : 264 1 29
249 : 272 1 30
250 : 272 1 30
251 : 272 1 30
252 : 272 1 30
253 : 272 1 30
254 : 272 1 30
255 : 272 1 30
256 : 272 1 30
257 : 280 1 31
258 : 280 1 31
259 : 280 1 31
260 : 280 1 31
261 : 280 1 31
262 : 280 1 31
263 : 280 1 31
264 : 280 1 31
265 : 288 1 32
266 : 288 1 32
267 : 288 1 32
268 : 288 1 32
269 : 288 1 32
270 : 288 1 32
271 : 288 1 32
272 : 288 1 32
273 : 296 1 33
274 : 296 1 33
275 : 296 1 33
276 : 296 1 33
277 : 296 1 33
278 : 296 1 33
279 : 296 1 33
280 : 296 1 33
281 : 304 1 34
282 : 304 1 34
283 : 304 1 34
284 : 304 1 34
285 : 304 1 34
286 : 304 1 34
287 : 304 1 34
288 : 304 1 34
289 : 312 1 35
290 : 312 1 35
291 : 312 1 35
292 : 312 1 35
293 : 312 1 35
294 : 312 1 35
295 : 312 1 35
296 : 312 1 35
297 : 320 1 36
298 : 320 1 36
299 : 320 1 36
300 : 320 1 36
301 : 320 1 36
302 : 320 1 36
303 : 320 1 36
304 : 320 1 36
305 : 328 1 37
306 : 328 1 37
307 : 328 1 37
308 : 328 1 37
309 : 328 1 37
310 : 328 1 37
311 : 328 1 37
312 : 328 1 37
313 : 336 1 38
314 : 336 1 38
315 : 336 1 38
316 : 336 1 38
317 : 336 1 38
318 : 336 1 38
319 : 336 1 38
320 : 336 1 38
321 : 344 1 39
322 : 344 1 39
323 : 344 1 39
324 : 344 1 39
325 : 344 1 39
326 : 344 1 39
327 : 344 1 39
328 : 344 1 39
329 : 352 1 40
330 : 352 1 40
331 : 352 1 40
332 : 352 1 40
333 : 352 1 40
334 : 352 1 40
335 : 352 1 40
336 : 352 1 40
337 : 360 1 41
338 : 360 1 41
339 : 360 1 41
340 : 360 1 41
341 : 360 1 41
342 : 360 1 41
343 : 360 1 41
344 : 360 1 41
345 : 368 1 42
346 : 368 1 42
347 : 368 1 42
348 : 368 1 42
349 : 368 1 42
350 : 368 1 42
351 : 368 1 42
352 : 368 1 42
353 : 376 1 43
354 : 376 1 43
355 : 376 1 43
356 : 376 1 43
357 : 376 1 43
358 : 376 1 43
359 : 376 1 43
360 : 376 1 43
361 : 384 1 44
362 : 384 1 44
363 : 384 1 44
364 : 384 1 44
365 : 384 1 44
366 : 384 1 44
367 : 384 1 44
368 : 384 1 44
369 : 392 1 45
370 : 392 1 45
371 : 392 1 45
372 : 392 1 45
373 : 392 1 45
374 : 392 1 45
375 : 392 1 45
376 : 392 1 45
377 : 400 1 46
378 : 400 1 46
379 : 400 1 46
380 : 400 1 46
381 : 400 1 46
382 : 400 1 46
383 : 400 1 46
384 : 400 1 46
385 : 408 1 47
386 : 408 1 47
387 : 408 1 47
388 : 408 1 47
389 : 408 1 47
390 : 408 1 47
391 : 408 1 47
392 : 408 1 47
393 : 416 1 48
394 : 416 1 48
395 : 416 1 48
396 : 416 1 48
397 : 416 1 48
398 : 416 1 48
399 : 416 1 48
400 : 416 1 48
401 : 424 1 49
402 : 424 1 49
403 : 424 1 49
404 : 424 1 49
405 : 424 1 49
406 : 424 1 49
407 : 424 1 49
408 : 424 1 49
409 : 432 1 50
410 : 432 1 50
411 : 432 1 50
412 : 432 1 50
413 : 432 1 50
414 : 432 1 50
415 : 432 1 50
416 : 432 1 50
417 : 440 1 51
418 : 440 1 51
419 : 440 1 51
420 : 440 1 51
421 : 440 1 51
422 : 440 1 51
423 : 440 1 51
424 : 440 1 51
425 : 448 1 52
426 : 448 1 52
427 : 448 1 52
428 : 448 1 52
429 : 448 1 52
430 : 448 1 52
431 : 448 1 52
432 : 448 1 52
433 : 456 1 53
434 : 456 1 53
435 : 456 1 53
436 : 456 1 53
437 : 456 1 53
438 : 456 1 53
439 : 456 1 53
440 : 456 1 53
441 : 464 1 54
442 : 464 1 54
443 : 464 1 54
444 : 464 1 54
445 : 464 1 54
446 : 464 1 54
447 : 464 1 54
448 : 464 1 54
449 : 472 1 55
450 : 472 1 55
451 : 472 1 55
452 : 472 1 55
453 : 472 1 55
454 : 472 1 55
455 : 472 1 55
456 : 472 1 55
457 : 480 1 56
458 : 480 1 56
459 : 480 1 56
460 : 480 1 56
461 : 480 1 56
462 : 480 1 56
463 : 480 1 56
464 : 480 1 56
465 : 488 1 57
466 : 488 1 57
467 : 488 1 57
468 : 488 1 57
469 : 488 1 57
470 : 488 1 57
471 : 488 1 57
472 : 488 1 57
473 : 496 1 58
474 : 496 1 58
475 : 496 1 58
476 : 496 1 58
477 : 496 1 58
478 : 496 1 58
479 : 496 1 58
480 : 496 1 58
481 : 504 1 59
482 : 504 1 59
483 : 504 1 59
484 : 504 1 59
485 : 504 1 59
486 : 504 1 59
487 : 504 1 59
488 : 504 1 59
489 : 512 1 60
490 : 512 1 60
491 : 512 1 60
492 : 512 1 60
493 : 512 1 60
494 : 512 1 60
495 : 512 1 60
496 : 512 1 60
497 : 520 1 61
498 : 520 1 61
499 : 520 1 61
500 : 520 1 61
501 : 520 1 61
502 : 520 1 61
503 : 520 1 61
504 : 520 1 61
505 : 528 1 62
506 : 528 1 62
507 : 528 1 62
508 : 528 1 62
509 : 528 1 62
510 : 528 1 62
511 : 528 1 62
512 : 528 1 62
513 : 536 1 63
514 : 536 1 63
515 : 536 1 63
516 : 536 1 63
517 : 536 1 63
518 : 536 1 63
519 : 536 1 63
520 : 536 1 63
521 : 544 0 64
522 : 544 0 64
523 : 544 0 64
524 : 544 0 64
525 : 544 0 64
526 : 544 0 64
527 : 544 0 64
528 : 544 0 64
529 : 552 0 65
530 : 552 0 65
531 : 552 0 65
532 : 552 0 65
533 : 552 0 65
534 : 552 0 65
535 : 552 0 65
536 : 552 0 65
537 : 560 0 66
538 : 560 0 66
539 : 560 0 66
540 : 560 0 66
541 : 560 0 66
542 : 560 0 66
543 : 560 0 66
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK