[PATCH] string_offset access optimization
| From: | Dmitry Stogov | Date: | Thu, 15 Jul 2010 09:10:14 +0000 |
| Subject: | [PATCH] string_offset access optimization | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-49078@lists.php.net to get a copy of this message | ||
Hi,
Recently I noticed that reading of string offset is performed in two
steps. At first special string_offset variant of temporary_variable is
created in zend_fetch_dimension_address_read() and then the real string
value is created in _get_zval_ptr_var_string_offset().
I think we can create the real string in the first place. This makes 50%
speed-up on string offset reading operation and allows to eliminate some
checks and conditional brunches in VM.
The patch is attached (don't forget to regenerate zend_vm_execute.h to
test it). However it changes behavior in one bogus case.
The following code now will emit "b" (currently it generates a fatal
error - cannot use string offset as an array).
$str = "abs";
var_dumo($str[1][0]);
I think it's not a problem at all.
"b" makes sense because "abs"[1] -> "b" and "b"[0] ->
"b".
I'm going to commit the patch in case of no objections.
Thanks. Dmitry.