From:             kris dot public at kauper dot net
Operating system: Fedora Core 2
PHP version:      5CVS-2004-12-26 (dev)
PHP Bug Type:     *General Issues
Bug description:  object instantiation/destruction memory leak

Description:
------------
While trying to track down a memory leak in my app, I came across this
behaviour:

Instantiating an object of a class that contains 9 or more class
variables, and then destroying that object, leaves 64 bytes of unreclaimed
memory.

Performing the same test with a class that contains 8 or fewer class
variables does not result in the same memory leak.

I've tried the supplied test script with PHP 4.3.8/9/10 and the latest CVS
version of PHP5, with the same results for each. In each case, I compiled
PHP using:

./configure --enable-memory-limit

Reproduce code:
---------------
<?php

// simple class having 9 class variables
class ClassWith9Vars
{
var $a1 = NULL;
var $a2 = NULL;
var $a3 = NULL;
var $a4 = NULL;
var $a5 = NULL;
var $a6 = NULL;
var $a7 = NULL;
var $a8 = NULL;
var $a9 = NULL;
}

// simple class having 8 class variables
class ClassWith8Vars
{
var $a1 = NULL;
var $a2 = NULL;
var $a3 = NULL;
var $a4 = NULL;
var $a5 = NULL;
var $a6 = NULL;
var $a7 = NULL;
var $a8 = NULL;
}

echo ("Starting test using ClassWith9Vars\n");

$m1 = memory_get_usage();

for ($i = 0; $i < 10; $i++)
{
$test =& new ClassWith9Vars();
unset($test);

$m2 = memory_get_usage();
echo ("leak = " . ($m2 - $m1) . "\n");
$m1 = $m2;
}

echo ("Starting test using ClassWith8Vars\n");

$m1 = memory_get_usage();

for ($i = 0; $i < 10; $i++)
{
$test =& new ClassWith8Vars();
unset($test);

$m2 = memory_get_usage();
echo ("leak = " . ($m2 - $m1) . "\n");
$m1 = $m2;
}

?>

Expected result:
----------------
Starting test using ClassWith9Vars
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0
Starting test using ClassWith8Vars
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0


Actual result:
--------------
Starting test using ClassWith9Vars
leak = 608
leak = 88
leak = 64
leak = 64
leak = 64
leak = 64
leak = 64
leak = 64
leak = 64
leak = 64
Starting test using ClassWith8Vars
leak = 32
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0
leak = 0


-- 
Edit bug report at http://bugs.php.net/?id=31297&edit=1
-- 
Try a CVS snapshot (php4):   http://bugs.php.net/fix.php?id=31297&r=trysnapshot4
Try a CVS snapshot (php5.0): 
http://bugs.php.net/fix.php?id=31297&r=trysnapshot50
Try a CVS snapshot (php5.1): 
http://bugs.php.net/fix.php?id=31297&r=trysnapshot51
Fixed in CVS:                http://bugs.php.net/fix.php?id=31297&r=fixedcvs
Fixed in release:            http://bugs.php.net/fix.php?id=31297&r=alreadyfixed
Need backtrace:              http://bugs.php.net/fix.php?id=31297&r=needtrace
Need Reproduce Script:       http://bugs.php.net/fix.php?id=31297&r=needscript
Try newer version:           http://bugs.php.net/fix.php?id=31297&r=oldversion
Not developer issue:         http://bugs.php.net/fix.php?id=31297&r=support
Expected behavior:           http://bugs.php.net/fix.php?id=31297&r=notwrong
Not enough info:             
http://bugs.php.net/fix.php?id=31297&r=notenoughinfo
Submitted twice:             
http://bugs.php.net/fix.php?id=31297&r=submittedtwice
register_globals:            http://bugs.php.net/fix.php?id=31297&r=globals
PHP 3 support discontinued:  http://bugs.php.net/fix.php?id=31297&r=php3
Daylight Savings:            http://bugs.php.net/fix.php?id=31297&r=dst
IIS Stability:               http://bugs.php.net/fix.php?id=31297&r=isapi
Install GNU Sed:             http://bugs.php.net/fix.php?id=31297&r=gnused
Floating point limitations:  http://bugs.php.net/fix.php?id=31297&r=float
No Zend Extensions:          http://bugs.php.net/fix.php?id=31297&r=nozend
MySQL Configuration Error:   http://bugs.php.net/fix.php?id=31297&r=mysqlcfg

Reply via email to