diff options
author | Dmitry Stogov <dmitry@zend.com> | 2015-08-24 22:07:28 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2015-08-24 22:07:28 +0300 |
commit | f9f568aa1e1564e068f2319af34d5834b3f3da09 (patch) | |
tree | a894e3240382df858d6d8a0c378bd514ccf2c2a9 /Zend/zend_hash.c | |
parent | 96ea4a0ac603f20d0f3128eba7e5085001fb6f68 (diff) | |
download | php-git-f9f568aa1e1564e068f2319af34d5834b3f3da09.tar.gz |
In 95% cases we initialize "empty" array (with 8 hash slots).
Diffstat (limited to 'Zend/zend_hash.c')
-rw-r--r-- | Zend/zend_hash.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 4f19fdd616..eaade17838 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -136,7 +136,20 @@ static void zend_always_inline zend_hash_real_init_ex(HashTable *ht, int packed) (ht)->nTableMask = -(ht)->nTableSize; HT_SET_DATA_ADDR(ht, pemalloc(HT_SIZE(ht), (ht)->u.flags & HASH_FLAG_PERSISTENT)); (ht)->u.flags |= HASH_FLAG_INITIALIZED; - HT_HASH_RESET(ht); + if (EXPECTED(ht->nTableMask == -8)) { + Bucket *arData = ht->arData; + + HT_HASH_EX(arData, -8) = -1; + HT_HASH_EX(arData, -7) = -1; + HT_HASH_EX(arData, -6) = -1; + HT_HASH_EX(arData, -5) = -1; + HT_HASH_EX(arData, -4) = -1; + HT_HASH_EX(arData, -3) = -1; + HT_HASH_EX(arData, -2) = -1; + HT_HASH_EX(arData, -1) = -1; + } else { + HT_HASH_RESET(ht); + } } } |