Re: RETURN micro optimization
| From: | Joe Watkins | Date: | Tue, 05 Apr 2016 12:32:24 +0000 |
| Subject: | Re: RETURN micro optimization | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-92101@lists.php.net to get a copy of this message | ||
Dmitry,
No worries ... I had just found out it wasn't particular to phpdbg ...
<?php
function foo($bar) {
var_dump(eval ("return \$bar;"));
var_dump($bar);
}
foo("test");
?>
Cheers
Joe
On Tue, Apr 5, 2016 at 1:14 PM, Dmitry Stogov <dmitry@zend.com> wrote:
>
>
> On 04/05/2016 12:04 PM, Derick Rethans wrote:
>
>> On Tue, 5 Apr 2016, Dmitry Stogov wrote:
>>
>> I propose a micro optimization for RETURN statement.
>>>
>>> Currently "return $x" increments reference counter of $x, then in
>>> zend_leave_helper() we perform zval_ptr_dtor() on the same $x.
>>>
>>> The patch sets the original value of $x to null in first place, so
>>> zval_ptr_dtor() is not going to be called.
>>>
>>>
>>> https://gist.github.com/dstogov/36f68b206242a39691ac539c2fc85d40
>>>
>>> the performance impact is invisible (0.1% less instruction retired on
>>> Wordpress).
>>>
>>> It breaks sapi/phpdbg/tests/breakpoints_005.phpt, but this is probably
>>> not a big deal.
>>>
>>> BTW: this change may affect debuggers in some other way.
>>>
>> I'd like to know why this breaks before saying something. It'd be a PITA
>> if this micro optimisation wouldn't actually do a lot performance wise,
>> but makes some debugging not possible.
>>
> Actually, the patch has a bug.
> It doesn't take into account that "return $x;" might be used in global
> scope.
> Setting $x to NULL in this case isn't right, of course.
>
> Introducing another check would probably negate the effect of
> micro-optimization.
>
> So, ignore this for now, and sorry for noise.
>
> Thanks. Dmitry.
>
>
>
>
>> cheers,
>> Derick
>>
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>