diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c index 55a2dec123f..e941703191e 100644 --- a/Zend/zend_alloc.c +++ b/Zend/zend_alloc.c @@ -116,11 +116,17 @@ ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) p->orig_lineno = __zend_orig_lineno; p->magic = MEM_BLOCK_START_MAGIC; p->reported = 0; + AG(cache_stats)[size][1]++; #endif p->persistent = 0; p->cached = 0; return (void *)((char *)p + sizeof(zend_mem_header) + PLATFORM_PADDING); } else { +#if ZEND_DEBUG + if (sizepNext; } } + +#if ZEND_DEBUG + do { + zval display_memory_cache_stats; + int i, j; + + if (zend_get_ini_entry("display_memory_cache_stats", sizeof("display_memory_cache_stats"), &display_memory_cache_stats)==FAILURE) { + break; + } + if (!atoi(display_memory_cache_stats.value.str.val)) { + break; + } + fprintf(stderr, "Memory cache statistics\n" + "-----------------------\n\n" + "[zval, %2d]\t\t%d / %d (%.2f%%)\n", + sizeof(zval), + AG(zval_cache_stats)[1], AG(zval_cache_stats)[0]+AG(zval_cache_stats)[1], + ((double) AG(zval_cache_stats)[1] / (AG(zval_cache_stats)[0]+AG(zval_cache_stats)[1]))*100); + + + for (i=0; inext; \ + RECORD_ZVAL_CACHE_HIT(); \ } else { \ (z) = emalloc(sizeof(zval)); \ + RECORD_ZVAL_CACHE_MISS(); \ } \ }