Edit report at http://bugs.php.net/bug.php?id=54249&edit=1
ID: 54249 User updated by: amrnablus at gmail dot com Reported by: amrnablus at gmail dot com Summary: extra CPU operation on each usage or E_* error types Status: Bogus Type: Feature/Change Request Package: Performance problem Operating System: ALL PHP Version: 5.3.5 Block user comment: N Private report: N New Comment: woops. Thanks guy, my bad. Previous Comments: ------------------------------------------------------------------------ [2011-03-14 19:44:37] Jared dot Williams at ntlworld dot com See constant folding. http://en.wikipedia.org/wiki/Constant_folding ------------------------------------------------------------------------ [2011-03-14 18:31:43] [email protected] I think you are missing a few pieces here on how compilers work. Yes, there is a preprocessor, but there is also a precompiler. The assembly generated by your example looks like this: movl $1, %esi leaq LC0(%rip), %rdi xorl %eax, %eax leave jmp _printf That says, put 1 into esi, then call printf. That 1 came from 1<<0L. The precompiler is smart enough to notice that this is an absolute constant here. ------------------------------------------------------------------------ [2011-03-14 18:03:24] amrnablus at gmail dot com Description: ------------ the way the errors are defined in zend_errors.h file makes an extra unneeded cpu shift (multiplication?) operation each time the error constant is used. clue: this is is from zend_errors.h: #define E_ERROR (1<<0L) if you printf( "%d" , E_ERROR ) the pre-processor will replace this line with printf( "%d" , 1<<0L ) which will cause an uncalled for shit operation Test script: --------------- /* this script will cause a php E_NOTICE to be used, notice the (minor) diff in execution time when error definitions are changed */ error_reporting( E_ALL ); for( $i=0 ; $i<10000000; $i++ ) { echo $x['a']; } Expected result: ---------------- no change to the output is a must ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=54249&edit=1
