[prev in list] [next in list] [prev in thread] [next in thread]
List: php-qa
Subject: Bug #77879 [Nab]: Usable memory
From: nikic () php ! net
Date: 2019-04-15 8:14:45
Message-ID: E1hFwlJ-0003wx-AX () bugs ! php ! net
[Download RAW message or body]
Edit report at https://bugs.php.net/bug.php?id=77879&edit=1
ID: 77879
Updated by: nikic@php.net
Reported by: xxalfa at gmail dot com
Summary: Usable memory
Status: Not a bug
Type: Bug
Package: Testing related
Operating System: Windows
PHP Version: 7.3.4
Block user comment: N
Private report: N
New Comment:
@xxalfa With your script, this is the last output I get:
memory_allocated -- 10 MByte -- memory_used -- 6740856 -- data_length -- 6290432
Fatal error: Allowed memory size of 16777216 bytes exhausted at \
/home/nikic/php-7.4/Zend/zend_string.h:205 (tried to allocate 6291488 bytes) in \
/home/nikic/php-7.4/t022.php on line 65
As you can see, the attempt is to allocate 6MB additional memory, which ends up going \
above the memory limit. Even though the string doesn't take up the full 16MB, in \
order to reallocate it (if it's not possible to do so in-place) we first have to \
create a new larger allocation, copy the string and then release the old one. So you \
may need about 2x more memory to handle the reallocation.
Previous Comments:
------------------------------------------------------------------------
[2019-04-14 03:20:53] xxalfa at gmail dot com
Reply to requinix@php.net
I am glad of every answer, only we both do not speak the same language. PHP can \
allocate as much memory as it needs. The amount of data I want to process requires \
knowing the amount of memory consumed to initiate paging operations. Any write access \
to the hard drive takes time, so I want to use as much memory as possible.
Reply to nikic@php.net
I thank you for your answer, which I now understand the way PHP works. I hope you can \
briefly answer my second question? When I open the task manager, I can keep track of \
how much memory a script consumes. Although PHP reserves full RAM, I can only fill it \
up to 40% at 16 MB. If I set the limit to 41% and fill the memory, I get a fatal \
error. In the Task Manager, a value of about 12 MB is given, why does not \
"memory_get_usage" provide the true consumption of 12 MB?
------------------------------------------------------------------------
[2019-04-12 07:48:07] nikic@php.net
Memory allocations are restricted to certain sizes for performance reasons. Small \
allocations are rounded up the next largest bin size. When the memory is reallocated \
with a size that still fits within the same bin, the reallocation is performed \
in-place and the reported memory usage will not change.
------------------------------------------------------------------------
[2019-04-12 03:06:55] requinix@php.net
No, the memory does not increase by 1024 each time. It increases by whatever amount \
PHP allocates in order to expand the string by another 1024 bytes. As your output \
shows, the last step it went up by 4096 - enough for approximately 4 increases.
Should it have only allocated 1k? Is it bad that PHP is reserving more memory than \
the precise amount it needs at that given moment?
------------------------------------------------------------------------
[2019-04-12 02:58:35] xxalfa at gmail dot com
The script executes successfully because it has detected because the level of memory \
has not changed. However, the level increases by 1024 per cycle, if the function were \
to work properly, the script would continue to work. That's why it's a bug.
------------------------------------------------------------------------
[2019-04-12 02:26:32] requinix@php.net
Your script is quitting because PHP didn't need to allocate more memory to handle \
another 1k characters. Why is that a bug?
------------------------------------------------------------------------
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=77879
--
Edit this bug report at https://bugs.php.net/bug.php?id=77879&edit=1
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic