]> granicus.if.org Git - php/commitdiff
Preallocate hash tables of required size
authorDmitry Stogov <dmitry@zend.com>
Wed, 3 Sep 2014 14:21:36 +0000 (18:21 +0400)
committerDmitry Stogov <dmitry@zend.com>
Wed, 3 Sep 2014 14:21:36 +0000 (18:21 +0400)
Zend/zend_builtin_functions.c
Zend/zend_objects.c
ext/opcache/Optimizer/compact_literals.c

index 1f50ad462ac939032c64f6bddf3a46824d61ea66..f320585e707f2c57872df3707694a11e62b329ea 100644 (file)
@@ -1062,7 +1062,7 @@ ZEND_FUNCTION(get_object_vars)
 
        zobj = Z_OBJ_P(obj);
 
-       array_init(return_value);
+       array_init_size(return_value, zend_hash_num_elements(properties));
 
        ZEND_HASH_FOREACH_STR_KEY_VAL_IND(properties, key, value) {
                if (key) {
index 9eea73deaf2792b452c8ffd0c71039bdb97d5652..40d37b3d3616bebd435853fd26bf4a12e673dfed 100644 (file)
@@ -154,7 +154,7 @@ ZEND_API void zend_objects_clone_members(zend_object *new_object, zend_object *o
 
                if (!new_object->properties) {
                        ALLOC_HASHTABLE(new_object->properties);
-                       zend_hash_init(new_object->properties, 8, NULL, ZVAL_PTR_DTOR, 0);
+                       zend_hash_init(new_object->properties, zend_hash_num_elements(old_object->properties), NULL, ZVAL_PTR_DTOR, 0);
                }
 
                ZEND_HASH_FOREACH_KEY_VAL(old_object->properties, num_key, key, prop) {
index 78f1d2844548c60a06b2a0d4435ca80fa55e3574..28e7a11314ea0d2feedf424fe385e3e9dcdaa831 100644 (file)
@@ -311,7 +311,7 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx
 
                /* Merge equal constants */
                j = 0; cache_slots = 0;
-               zend_hash_init(&hash, 16, NULL, NULL, 0);
+               zend_hash_init(&hash, op_array->last_literal, NULL, NULL, 0);
                map = (int*)zend_arena_alloc(&ctx->arena, op_array->last_literal * sizeof(int));
                memset(map, 0, op_array->last_literal * sizeof(int));
                for (i = 0; i < op_array->last_literal; i++) {