From: Dmitry Stogov Date: Tue, 3 Oct 2006 11:10:54 +0000 (+0000) Subject: Speedup array/HashTable copying. (Matt W) X-Git-Tag: RELEASE_1_0_0RC1~1460 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e8ddcf1077b010bffb23db34f7a6113f3f6403dc;p=php Speedup array/HashTable copying. (Matt W) --- diff --git a/Zend/zend_API.c b/Zend/zend_API.c index a77447dd30..e416e2110d 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -1221,7 +1221,7 @@ ZEND_API void zend_update_class_constants(zend_class_entry *class_type TSRMLS_DC #else ALLOC_HASHTABLE(class_type->static_members); #endif - zend_u_hash_init(CE_STATIC_MEMBERS(class_type), 0, NULL, ZVAL_PTR_DTOR, 0, UG(unicode)); + zend_u_hash_init(CE_STATIC_MEMBERS(class_type), zend_hash_num_elements(&class_type->default_static_members), NULL, ZVAL_PTR_DTOR, 0, UG(unicode)); zend_hash_internal_pointer_reset_ex(&class_type->default_static_members, &pos); while (zend_hash_get_current_data_ex(&class_type->default_static_members, (void**)&p, &pos) == SUCCESS) { @@ -1291,7 +1291,7 @@ ZEND_API int _object_and_properties_init(zval *arg, zend_class_entry *class_type object->properties = properties; } else { ALLOC_HASHTABLE_REL(object->properties); - zend_u_hash_init(object->properties, 0, NULL, ZVAL_PTR_DTOR, 0, UG(unicode)); + zend_u_hash_init(object->properties, zend_hash_num_elements(&class_type->default_properties), NULL, ZVAL_PTR_DTOR, 0, UG(unicode)); zend_hash_copy(object->properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); } } else { diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index c7472e8444..3bf3514144 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1926,7 +1926,7 @@ ZEND_API void function_add_ref(zend_function *function TSRMLS_DC) zval *tmp_zval; ALLOC_HASHTABLE(op_array->static_variables); - zend_u_hash_init(op_array->static_variables, 2, NULL, ZVAL_PTR_DTOR, 0, UG(unicode)); + zend_u_hash_init(op_array->static_variables, zend_hash_num_elements(static_variables), NULL, ZVAL_PTR_DTOR, 0, UG(unicode)); zend_hash_copy(op_array->static_variables, static_variables, (copy_ctor_func_t) zval_add_ref, (void *) &tmp_zval, sizeof(zval *)); } } diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c index 1f1936950f..a929966e37 100644 --- a/Zend/zend_variables.c +++ b/Zend/zend_variables.c @@ -157,7 +157,7 @@ copy_unicode: return; /* do nothing */ } ALLOC_HASHTABLE_REL(tmp_ht); - zend_u_hash_init(tmp_ht, 0, NULL, ZVAL_PTR_DTOR, 0, original_ht->unicode); + zend_u_hash_init(tmp_ht, zend_hash_num_elements(original_ht), NULL, ZVAL_PTR_DTOR, 0, original_ht->unicode); zend_hash_copy(tmp_ht, original_ht, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); Z_ARRVAL_P(zvalue) = tmp_ht; }