|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2001-11-28 04:01 UTC] derick@php.net
[2010-12-17 14:19 UTC] jani@php.net
-Summary: Don't free each allocation in
cgimode
+Summary: Don't free each allocation during
shutdown
-Package: Feature/Change Request
+Package: CGI related
-Operating System: all
+Operating System: *
-PHP Version: 4.0.6
+PHP Version: *
[2015-02-17 09:18 UTC] krakjoe@php.net
-Status: Open
+Status: Wont fix
[2015-02-17 09:18 UTC] krakjoe@php.net
[2015-02-17 09:20 UTC] krakjoe@php.net
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 08:00:02 2025 UTC |
If compiled in standalone cgi mode, when the script exits, php only needs to free resources, not other arrays or strings or items (unless we ever support object destructors). It can take a LONG time to free a hundred thousand or so elements in nested arrays, 4 or 5 times longer than it takes to create then. See these threads in phpdev mailing list: Re: [PHP-DEV] maybe serious error in RC3 memory manager RE: [PHP-DEV] CGI quick cleanup Sample code: Note how long it takes to exit after finishing. #! /usr/bin/php -q <?php ini_Set("max_execution_time","0"); ini_Set("memory_limit","500M"); class thingy { function thingy($c) { if ($c>0) $this->ref=&new thingy($c-1); } } $stash=array(); $max=500000; $start=time(); for($i=0;$i<$max;$i++) { $r=rand(0,300); $stash[$r][]=&new thingy(rand(0,10)); echo "\rUse: ".floor($i/$max*100)."% "; } echo "\n"; $mid=time(); $max=count($stash); $c=0; foreach(array_keys($stash) as $key) { unset($stash[$key]); $c++; echo "\rFree: ".floor($c/$max*100)."% "; } unset($stash); echo "\n"; $done=time(); print "Use: ".($mid-$start)."\n"; print "Free: ".($done-$mid)."\n"; ?>