summaryrefslogtreecommitdiff
path: root/Zend/zend_hash.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2015-08-24 22:07:28 +0300
committerDmitry Stogov <dmitry@zend.com>2015-08-24 22:07:28 +0300
commitf9f568aa1e1564e068f2319af34d5834b3f3da09 (patch)
treea894e3240382df858d6d8a0c378bd514ccf2c2a9 /Zend/zend_hash.c
parent96ea4a0ac603f20d0f3128eba7e5085001fb6f68 (diff)
downloadphp-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.c15
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);
+ }
}
}