#28131 [Bgs]: refcount limit is 64k

From: Date: Mon, 26 Apr 2004 17:05:42 +0000
Subject: #28131 [Bgs]: refcount limit is 64k
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-58803@lists.php.net to get a copy of this message
ID: 28131 User updated by: webmaster at macway dot com Reported By: webmaster at macway dot com Status: Bogus Bug Type: Reproducible crash Operating System: Windows XP PHP Version: 4.3.6 New Comment: >The problemis that ZE1 has a limit of 64k references > before it overflows and causes this problem. Thanks, but does your hypothesis explains this : - It works perfectly under Mac OS X.3 (did not test any other unix). So it seems to be windows only (do you agree). - if I have 4 different arrays, I can only have 4x16K records and not 4x64K records. So it seems the total number of record of all arrays is limited to 16K (and not 64K x number of different arrays). I did test it with 4 different arrays containing 10000 records and its ok, with 20000 records in each it crashes. Thanks for your insight Previous Comments: ------------------------------------------------------------------------ [2004-04-26 18:48:55] wez@php.net ah, this bug. It is to do with the COW reference created by the engine when you copy $chunk around. Since it is the same chunk, the engine saves copying the 1MB and adds a reference to the variable. The problem is that ZE1 has a limit of 64k references before it overflows and causes this problem. It has nothing to do with memory usage. It is a known bug in this database (although I couldn't find it just now; it *is* in here somewhere). This problem will not be fixed in PHP 4.x, but has already been addressed in PHP 5. Workaround: use $toto .= str_repeat('a', 1024) inside the main loop, as this returns unique strings on each iteration. ------------------------------------------------------------------------ [2004-04-26 18:02:22] webmaster at macway dot com > wez Ok perharps its works with str_repeat, but it doesn't seem to work with array. Please check with my code. Maybe I badly worded it,; maybe it's just with arrays, check with my lateest code please ------------------------------------------------------------------------ [2004-04-26 17:53:33] webmaster at macway dot com As I just said, I retested it with PHP 4.3.6 ALONE (without any webserver) using the php.exe under windows XP. So it's clearly a problem with PHP 4.3.6 itself ------------------------------------------------------------------------ [2004-04-26 17:32:16] wez@php.net Sorry, but your problem does not imply a bug in PHP itself. For a list of more appropriate places to ask for help using PHP, please visit http://www.php.net/support.php as this bug system is not the appropriate forum for asking support questions. Thank you for your interest in PHP. My 512MB laptop running XP will allocate 800MB (probably as much as the page file size, if I pushed it). C:\php4>php -r "$x = str_repeat('*', 128 * 1024 * 1024); echo 'Done';" Done C:\php4>php -r "$x = str_repeat('*', 400 * 1024 * 1024); echo 'Done';" Done C:\php4>php -r "$x = str_repeat('*', 600 * 1024 * 1024); echo 'Done';" Done C:\php4>php -r "$x = str_repeat('*', 800 * 1024 * 1024); echo 'Done';" Done C:\php4>php -r "$x = str_repeat('*', 1280 * 1024 * 1024); echo 'Done';" FATAL: emalloc(): Unable to allocate 1342177281 bytes It works fine; no crashes. You must have something wrong with your configuration; check your memory_limit and error_reporting settings and talk to someone on a support channel to discover the reason that you have problems with this. ------------------------------------------------------------------------ [2004-04-26 16:58:08] webmaster at macway dot com Faster code exhibiting the problem : <?php for ($i = 1; $i <= 1024; $i++) // I'm just making a 1024 Byte string { $chunk .='a'; } for ($i = 1; $i <= 66000; $i++) // if you use 65000 it works { $tablo[]=$chunk; } echo "c'est fini"; ?> ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/28131 -- Edit this bug report at http://bugs.php.net/?id=28131&edit=1

« previous php.bugs (#58803) next »