|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2011-06-11 16:48 UTC] felipe@php.net
-Status: Open
+Status: Bogus
[2011-06-11 16:48 UTC] felipe@php.net
[2011-06-11 17:01 UTC] rodney dot rehm at medialize dot de
[2011-06-11 17:02 UTC] felipe@php.net
[2011-06-11 17:42 UTC] rodney dot rehm at medialize dot de
[2011-06-11 21:45 UTC] rodney dot rehm at medialize dot de
[2011-06-11 22:47 UTC] felipe@php.net
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 01:00:02 2025 UTC |
Description: ------------ For some reason values returned by __get() aren't released from memory. $ php memory.php # (without --debug) 0.0096 seconds and 1.3461 MB for 10000 accessing known property $ php memory.php # (with --debug) 0.0317 seconds and 2.6435 MB for 10000 accessing known property $ export USE_ZEND_ALLOC=0 $ php memory.php # (with --debug) 0.0267 seconds and 0.0000 MB for 10000 accessing known property since disabling Zend Memory Manager solved the issue, the valgrind log is pretty much useless, thus not attached. Test script: --------------- <?php class Memleak { public function __get($name) { return "hello world"; } } $iterations = 10000; $foo = new Memleak(); $start = microtime(true); $mem = memory_get_usage(); for ($i=0; $i < $iterations; $i++) { $foo->{'bar' . $i}; } $_mem = memory_get_usage(); $_start = microtime(true); printf("%0.4f seconds and %0.4f MB for %d accessing known property\n", $_start - $start, ($_mem - $mem) / 1024 / 1024, $iterations); ?> Expected result: ---------------- 0.0099 seconds and 0.0000 MB for 10000 accessing known property Actual result: -------------- 0.0099 seconds and 1.3460 MB for 10000 accessing known property