From: Dmitry Stogov Date: Tue, 3 Oct 2006 11:10:33 +0000 (+0000) Subject: Speedup array/HashTable copying. (Matt W) X-Git-Tag: php-5.2.0RC5~35 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c1ad451c3e70459787b61add4445141594659955;p=php Speedup array/HashTable copying. (Matt W) --- diff --git a/NEWS b/NEWS index cabb18e634..4e696cacbf 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,7 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? Sep 2006, PHP 5.2.0 +- Speedup array/HashTable copying. (Matt W, Dmitry) - Added ability to make SOAP call userspace PHP<->XML converters. (Dmitry) - Fixed infinite loop when a wrong color index is given to imagefill (Pierre) - Fixed mess with CGI/CLI -d option (now it works with cgi; constants are diff --git a/Zend/zend_API.c b/Zend/zend_API.c index e90807fc6d..117d14a751 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -882,7 +882,7 @@ ZEND_API void zend_update_class_constants(zend_class_entry *class_type TSRMLS_DC #else ALLOC_HASHTABLE(class_type->static_members); #endif - zend_hash_init(CE_STATIC_MEMBERS(class_type), 0, NULL, ZVAL_PTR_DTOR, 0); + zend_hash_init(CE_STATIC_MEMBERS(class_type), zend_hash_num_elements(&class_type->default_static_members), NULL, ZVAL_PTR_DTOR, 0); 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) { @@ -943,7 +943,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_hash_init(object->properties, 0, NULL, ZVAL_PTR_DTOR, 0); + zend_hash_init(object->properties, zend_hash_num_elements(&class_type->default_properties), NULL, ZVAL_PTR_DTOR, 0); 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 191d8dfe94..86b0013816 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1796,7 +1796,7 @@ ZEND_API void function_add_ref(zend_function *function) zval *tmp_zval; ALLOC_HASHTABLE(op_array->static_variables); - zend_hash_init(op_array->static_variables, 2, NULL, ZVAL_PTR_DTOR, 0); + zend_hash_init(op_array->static_variables, zend_hash_num_elements(static_variables), NULL, ZVAL_PTR_DTOR, 0); 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 ca24c3d6fb..0b7143ac4b 100644 --- a/Zend/zend_variables.c +++ b/Zend/zend_variables.c @@ -130,7 +130,7 @@ ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC) return; /* do nothing */ } ALLOC_HASHTABLE_REL(tmp_ht); - zend_hash_init(tmp_ht, 0, NULL, ZVAL_PTR_DTOR, 0); + zend_hash_init(tmp_ht, zend_hash_num_elements(original_ht), NULL, ZVAL_PTR_DTOR, 0); zend_hash_copy(tmp_ht, original_ht, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); zvalue->value.ht = tmp_ht; }