Bug #53980 [Opn->Nab]: On the Windows-version of PHP can not allocate more memory than 512 memory_limi

From: Date: Mon, 01 Feb 2021 15:53:14 +0000
Subject: Bug #53980 [Opn->Nab]: On the Windows-version of PHP can not allocate more memory than 512 memory_limi
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-231870@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=53980&edit=1

 ID:                 53980
 Updated by:         cmb@php.net
 Reported by:        skibi82 at interia dot pl
 Summary:            On the Windows-version of PHP can not allocate more
                     memory than 512 memory_limi
-Status:             Open
+Status:             Not a bug
 Type:               Bug
 Package:            PHP options/info functions
 Operating System:   Win7 , WinXP, Win2008 srv R2
 PHP Version:        5.3.9
-Assigned To:        
+Assigned To:        cmb
 Block user comment: N
 Private report:     N

 New Comment:

Prior to PHP 7.0.0, official non-experimental PHP builds for
Windows were only available for x86 which is 32bit even on 64bit
Windows versions, where the address space of a single process is
limited to at most 2GB (or 3GB with 4GT), and in practice, heap
space is way more limited.  As of PHP 7.0.0, official
non-experimental x64 PHP builds for Windows are available; use
these!


Previous Comments:
------------------------------------------------------------------------
[2012-11-04 14:00:31] miau dot jp at gmail dot com

This is caused by heap size limitation of Windows. A process can use
heap up to nealy 1500MB on recent versions of Windows.

Because of fragmentation, actual limit is less than 1500MB.
For example, I added some debugging code to PHP (see
https://gist.github.com/4011991 ) and ran following
sample
script.

----

<?php
ini_set('memory_limit', '3072M');
define('MB', 1024 * 1024);
$str = str_repeat('a', 400 * MB);
$str = '' . $str;
$str .= $str;

>php bug53980.php
[alloc]        segment: 0x02CF0048-0x02D30047 size: 262144 (0MB)
[free]         segment: 0x02CF0048
[alloc]        segment: 0x02CF0048-0x02D30047 size: 262144 (0MB)
[alloc]        segment: 0x02D30050-0x02D7004F size: 262144 (0MB)
[alloc]        segment: 0x102A0020-0x292E001F size: 419692544 (400MB)
[alloc]        segment: 0x292F0020-0x4233001F size: 419692544 (400MB)
[free]         segment: 0x102A0020
[realloc from] segment: 0x292F0020
[realloc to]   segment: 0x00000000-0x3203FFFF size: 839122944 (800MB)

Fatal error: Out of memory (allocated 420216832) (tried to allocate 838860801 
bytes) in C:\***\bug55980.php on line 6
zend_mm_heap corrupted

----

Dispite the heap has nearly 1100MB free space in total, there is no
contiguous 800MB space. Then HeapRealloc() fails and returns NULL.

------------------------------------------------------------------------
[2012-03-06 11:51:30] shaun at laughey dot com

Still an issue on PHP 5.3.10 tested on Windows 2008 and Windows 7 using FCGI and mod_php on both
platforms.

------------------------------------------------------------------------
[2012-01-24 18:47:20] skibi82 at interia dot pl

The error still occurs

------------------------------------------------------------------------
[2012-01-24 18:45:19] skibi82 at interia dot pl

Fatal error: Out of memory (allocated 537919488) (tried to allocate 536870913 
bytes) XXXX
zend_mm_heap corrupted

The error occurs regardless of the setting memory_limit

------------------------------------------------------------------------
[2011-11-04 15:54:48] skibi8 at interia dot pl

In version 5.3.8 error still occurs

E:\SVN>test.php
5.3.8
Limit:4024M
100
1000
PHP Fatal error:  Out of memory (allocated 736362496) (tried to allocate 734003
01 bytes) in E:\SVN\test.php on line 25

---
echo phpversion()."\n"; 

 ini_set ('memory_limit', '4024M');
 echo 'Limit:'.ini_get ('memory_limit')."\n";

$mb='';
$x=0;
do {
$x++;
$mb.='X';
}while ($x< 1048576);
echo "100\n";
$x=0;
$mb100='';
do {
$x++;
$mb100.=$mb;
}while ($x< 100);
echo "1000\n";
$x=0;
$gb='';
do {
$x++;
$gb.=$mb100;
}while ($x< 10);
echo "OK\n";



Fatal error: Out of memory (allocated 736362496) (tried to allocate 734003201 b
tes) in E:\SVN\test.php on line 25
zend_mm_heap corrupted

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


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

    https://bugs.php.net/bug.php?id=53980


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


Thread (1 message)

  • cmb@php.net
  • Unknown Message
    • cmb@php.net
« previous php.bugs (#231870) next »