为什么PHP7扩展内存泄漏?

时间:2017-08-30 00:21:40

标签: memory-leaks php-7 php-extension

ANSWER :因为php 7.0.15和php 7.0.6如果与refcounter一起使用的方式不同:在php 7.0.15中zval_dtor()递减refcounter,在php 7.0.6中是没有。

我在循环,100000次迭代中调用以下test_test函数,并看到内存使用量增加。

for( $i = 0; $i < 100000; ++ $i ) {
    test_test();
    if ( 0 == $i % 10000 ) {
        echo memory_get_usage(), PHP_EOL;
    }
}

扩展代码:

PHP_FUNCTION(test_test)
{
    zval zzz;
    array_init(&zzz);

    if (Z_REFCOUNTED(zzz)) {

        if(Z_REFCOUNT(zzz) ) {
            // --- we do reach this line of code
            Z_DELREF(zzz); // (1)

        }

        if( 0 == Z_REFCOUNT(zzz) ) { // (2)
            // --- we do reach this line of code
            zval_dtor(&zzz);
        }
    }
}

当我移除(1)和(2)时 - 不再倾斜。但是这些变化不会影响“zval_dtor()”调用 - 它在两种情况下都会调用。

(更令人讨厌的是,2台不同的php7机器表现不同:问题仅存在于其中一台。我相信我在两者上都有相同的php7版本。)

0 个答案:

没有答案