Bug #70341 [Fbk]: Weird behaviour of memory_get and peak_usage
Edit report at https://bugs.php.net/bug.php?id=70341&edit=1
ID: 70341
Updated by: cmb@php.net
Reported by: quantuumsnot at gmail dot com
Summary: Weird behaviour of memory_get and peak_usage
Status: Feedback
Type: Bug
Package: *General Issues
Operating System: windows 7 x64
PHP Version: 7.0.0RC1
Block user comment: N
Private report: N
New Comment:
> Tested it on 3v4l.org and the results are the same, 5.5.0-5.6.12 always win
Can you please post a link to the 3v4l.org test?
Previous Comments:
------------------------------------------------------------------------
[2015-08-26 20:34:24] quantuumsnot at gmail dot com
This problem is valid for devster's 'Ubench' script too:
---
<?php
error_reporting(-1);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
gc_enable();
// https://github.com/devster/ubench
require_once 'src/Ubench.php';
$bench = new Ubench;
$testSum = 0;
$bench->start();
// Execute some code
for ($i = 0; $i < 1000000; $i++) { $j= $i; }
$bench->end();
// Get elapsed time and memory
echo "<br />" . $bench->getTime();
echo "<br />" . $bench->getTime(true); // elapsed microtime in float
echo "<br />" . $bench->getTime(false, '%d%s');
echo "<br />" . $bench->getMemoryPeak();
echo "<br />" . $bench->getMemoryPeak(true); // memory peak in bytes
echo "<br />" . $bench->getMemoryPeak(false, '%.3f%s');
// Returns the memory usage at the end mark
echo "<br />" . $bench->getMemoryUsage();
exit();
?>
------------------------------------------------------------------------
[2015-08-24 20:00:36] cmb@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves.
A proper reproducing script starts with ,
is max. 10-20 lines long and does not require any external
resources such as databases, etc. If the script requires a
database to demonstrate the issue, please make sure it creates
all necessary tables, stored procedures etc.
Please avoid embedding huge scripts into the report.
See <https://3v4l.org/0SjGE> for expected behavior.
------------------------------------------------------------------------
[2015-08-24 12:45:59] quantuumsnot at gmail dot com
To be precise - using false gives me 0 bytes, using true gives me a rly big difference in bytes used
------------------------------------------------------------------------
[2015-08-24 12:42:08] quantuumsnot at gmail dot com
Description:
------------
I usually use this short script to test some home-brew functions but noticed a inconsistency in
memory_get_usage() and memory_get_peak_usage()
Corresponding to docs, when using:
FALSE parameter - emalloc() returns bytes used by the script
TRUE parameter - returns bytes allocated by OS
The problem is that the script worked on PHP 5.6.8 x64 Thread Safe - returned bytes are above 0, but
in 7.0.0RC1 this returns 0
The fix is to use at line #1 memory_get_usage(false) which returns 40-50 times!!! bigger memory
usage (for example 1.6-1.8MB instead of 40-45KB)
Tested it on 3v4l.org and the results are the same, 5.5.0-5.6.12 always win
What is the correct way to benchmark my code in PHP7 using pure PHP? (do not suggest xdebug or
frameworks, please)
Test script:
---------------
$memoryUsage = memory_get_peak_usage(false);
someFunctionCalled();
$memoryUsage = abs(memory_get_peak_usage(false) - $memoryUsage);
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=70341&edit=1
Thread (10 messages)