ID:               41053
 Updated by:       [EMAIL PROTECTED]
 Reported By:      matthieu dot aubry at gmail dot com
 Status:           Feedback
 Bug Type:         Performance problem
 Operating System: linux
 PHP Version:      5.2.1
 New Comment:

Each element requires a value structure (zval) which takes 16 bytes.
Also requires a hash bucket - which takes 36 bytes. That gives 52 bytes
per value. Memory allocation headers take another 8 bytes*2 - which
gives 68 bytes. Pretty close to what you have. 


Previous Comments:
------------------------------------------------------------------------

[2007-04-11 14:12:11] [EMAIL PROTECTED]

Please try using this CVS snapshot:

  http://snaps.php.net/php5.2-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5.2-win32-latest.zip



------------------------------------------------------------------------

[2007-04-11 13:26:37] matthieu dot aubry at gmail dot com

Description:
------------
Hello,

I would like to cache big tables containing integers in PHP memory. But
I notice that PHP uses a LOT of memory for variables.

I simply fill an array indexed with 1,000,000 distinct integers. I
assign 0 to all elements.

Results
=======
PHP 5.1.2 result is 57.5 MB
PHP 5.2.1 result is 99.4 MB


Minimum used = 1E6 * (4bytes+4bytes) = 8MB.
I don't know much about PHP Array implementation. I don't expect it to
use only 8MB of course, but I think it actually uses too much memory.

Also, why this difference between the 2 versions? 
(I've read bug reports stating memory problem in 5.2.0 but they were
said to be fixed before 5.2.1)

Reproduce code:
---------------
<?php
function getMemoryUsage()
{
        return round(memory_get_usage() / (1024*1024), 1)." MB";
}
function printMemoryUsage()
{
        print("Memory = ".getMemoryUsage()." <br>\n");
}
printMemoryUsage();

$end = 1000000;
$array = array();
printMemoryUsage();
for($i = 0; $i < $end; $i++)
{
        $array[$i] = 0;
}
printMemoryUsage();
?>

Expected result:
----------------
Thank you for explanations/details ; is this behaviour expected? 
Could it be improved in future releases?


Actual result:
--------------
=================
Test PHP 5.2.1-0.dotdeb.1 with Suhosin-Patch 0.9.6.2 (cli) (built: Feb 
9 2007 04:46:32)
=================
Linux 2.4.33bipiv-ipv4-32 #1 SMP lun oct 23 18:38:55 CEST 2006 i686
GNU/Linux

# time php test27.php
Memory = 0.1 MB <br>
Memory = 0.1 MB <br>
Memory = 99.4 MB <br>

real    0m0.954s

=================
Test PHP 5.1.2 (cli) (built: Mar  7 2007 21:53:56)
=================
Linux 2.6.15-23-386 #1 PREEMPT Tue May 23 13:49:40 UTC 2006 i686
GNU/Linux

$ time php test27.php
Memory = 0 MB <br>
Memory = 0 MB <br>
Memory = 57.5 MB <br>

real    0m1.520s


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=41053&edit=1

Reply via email to