Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:37215 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 70801 invoked from network); 25 Apr 2008 13:50:46 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 25 Apr 2008 13:50:46 -0000 Authentication-Results: pb1.pair.com header.from=php_lists@realplain.com; sender-id=unknown Authentication-Results: pb1.pair.com smtp.mail=php_lists@realplain.com; spf=permerror; sender-id=unknown Received-SPF: error (pb1.pair.com: domain realplain.com from 209.151.69.1 cause and error) X-PHP-List-Original-Sender: php_lists@realplain.com X-Host-Fingerprint: 209.151.69.1 liberty.vosn.net Linux 2.4/2.6 Received: from [209.151.69.1] ([209.151.69.1:50031] helo=liberty.vosn.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 3F/69-18287-1B1E1184 for ; Fri, 25 Apr 2008 09:50:46 -0400 Received: from d1-207.rt-bras.wnvl.centurytel.net ([69.179.128.207]:52026 helo=pc1) by liberty.vosn.net with smtp (Exim 4.68) (envelope-from ) id 1JpOJy-0006yP-0L for internals@lists.php.net; Fri, 25 Apr 2008 07:50:38 -0600 Message-ID: <014b01c8a6db$57d53ba0$0201a8c0@pc1> To: Date: Fri, 25 Apr 2008 08:50:35 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2800.1914 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1914 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - liberty.vosn.net X-AntiAbuse: Original Domain - lists.php.net X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - realplain.com Subject: [PATCH] More array filling optimizations From: php_lists@realplain.com ("Matt Wilmas") Hi all, Expanding on the idea of passing a size other than 0 to zend_hash_init(), when possible, which was done awhile ago in a few areas (to save resize/rehash operations), I finally added an "array_init_size()" that can be used instead of array_init(), likewise, when a size is known. As an example to start, I updated these functions: array_*: change_key_case, chunk, combine, fill, fill_keys, flip, keys (without $search_value), map, rand, reverse, slice, splice, unique (since it copies all entries first), values; and also compact; func_get_args; get_defined_vars; str_split; and a couple internal uses. Those were the simplest, most obvious cases I found. :-) I didn't test every function, but for example, the array functions that don't do much work I found to be ~10% faster (with more than 8 elements, otherwise no resizing would be needed). If these changes are applied, more can be done where possible, by others, or I can and send further patches, or update them myself if I have CVS access... http://realplain.com/php/array_init_size.diff http://realplain.com/php/array_init_size_5_3.diff I was playing with initializing scripts' array( ... ) constructs with the correct size too, but wasn't sure about the changes or what the opinion would be. Runtime creation is improved with >8 elements, though it adds a bit of compile overhead. Anyway, separate patches for that: http://realplain.com/php/array_init_size_vm.diff http://realplain.com/php/array_init_size_vm_5_3.diff Thanks, Matt