Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:105090 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 35058 invoked from network); 5 Apr 2019 10:30:41 -0000 Received: from unknown (HELO mx.zeyos.com) (88.99.153.70) by pb1.pair.com with SMTP; 5 Apr 2019 10:30:41 -0000 Received: from mx.zeyos.com (localhost [127.0.0.1]) by mx.zeyos.com (Postfix) with ESMTP id E2A025FB14 for ; Fri, 5 Apr 2019 09:26:30 +0200 (CEST) Authentication-Results: mx.zeyos.com (amavisd-new); dkim=pass (1024-bit key) reason="pass (just generated, assumed good)" header.d=zeyos.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=zeyos.com; h= content-transfer-encoding:content-type:content-type:mime-version :to:from:from:subject:subject:date:date; s=dkim; t=1554449190; x=1555313191; bh=SkIX+OoDfbBvcSSsMn37VFtWVNxj6823fmvNLSrKqck=; b= W8C1VEaWckT2qBYDyF0dBQSQ7opbuW6FMVEIDQ+Qw4B9bVSPR4id92Fg2bFkmpJK h+bGsw1ZdgDPrL/rToR1GXz5fjI6wDzhDNfzTN3JLgQg5B91tzKvGlvUDcEVcPaI sbszSd6//HseowoBJUa66Ywd2aFXsPnTrgo2F1SgOlE= X-Virus-Scanned: Debian amavisd-new at mx.zeyos.com Received: from mx.zeyos.com ([127.0.0.1]) by mx.zeyos.com (mx.zeyos.com [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id cBNJxZGZBkxn for ; Fri, 5 Apr 2019 09:26:30 +0200 (CEST) Received: from cloud.zeyos.com (unknown [81.171.8.203]) by mx.zeyos.com (Postfix) with ESMTPSA id 8E3605FB11; Fri, 5 Apr 2019 09:26:30 +0200 (CEST) Date: Fri, 05 Apr 2019 09:26:30 +0200 To: PHP Internals Cc: Dmitry Stogov , Nikita Popov MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20190405072630.E2A025FB14@mx.zeyos.com> Subject: Optimize zend_string equality check with hash key From: ben.coutu@zeyos.com (Benjamin Coutu) Hello,=0A=0AI was surprised to find out that equality checks on zend_string= do not take advantage of the fact that in many cases we have a hash key av= ailable that can be utilized in a quick bailout path without having to reso= rt to a costly `memcmp` on the value.=0A=0AI recommend to modify `zend_stri= ng_equal_content` like so:=0A=0Astatic zend_always_inline zend_bool zend_st= ring_equal_content(zend_string *s1, zend_string *s2)=0A{=0A if (ZSTR_LEN(s= 1) !=3D ZSTR_LEN(s2)) {=0A return 0;=0A }=0A=0A if (ZSTR_H(s1) && ZSTR= _H(s1) !=3D ZSTR_H(s2)) {=0A return 0;=0A }=0A=0A return zend_string_e= qual_val(s1, s2);=0A}=0A=0AThoughts?=0A=0A-- =0A=0ABenjamin Coutu=0Aben.cou= tu@zeyos.com