4

PHP内存管理ZMM(二)-常见宏的值

 2 years ago
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(二)-常见宏的值

2018-04-09

相关宏的定义

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK