Re: issue in copying the hash table(Reposted third time)

From: Date: Thu, 08 Jul 2004 09:01:17 +0000
Subject: Re: issue in copying the hash table(Reposted third time)
References: 1 2 3 4 5 6 7 8  Groups: php.internals 
Request: Send a blank email to internals+get-10974@lists.php.net to get a copy of this message
On 2004/07/08, at 14:41, Kamesh Jayachandran wrote:
The last parameter sizeof(zend_class_entry) of value say 292 to zend_hash_copy indicate it to dereference the value of one of the hashtable entry. This value is of type zend_class_entry** which when dereferenced once gives rise to zend_class_entry* the corresponding memcpy function copies 292 bytes from this zend_class_entry * which is not correct. For details look at INIT_DATA macro in zend_hash.c
This makes sense. So, your intention is just to make the line in question to reduce unnecessary malloc()'s and memcpy()'s. zend_hash_copy(compiler_globals->class_table, ... , sizeof(zend_class_entry)); Although this can eventually work, the newly built hash table CG(class_table) will hold the redundant space of sizeof(zend_class_entry) - sizeof(zend_class_entry *) bytes per class entry. And then you pointed out the above line should go like zend_hash_copy(compiler_globals->class_table, ... , sizeof(zend_class_entry *)); This appears a typo because the global function table, which is a hash table that contains instances of zend_function (not zend_function *), is also copied by zend_hash_copy() with the last argument being sizeof(zend_function). zend_hash_copy(compiler_globals->function_table, ... , sizeof(zend_function)); ... Did I get it right? Regards, Moriyoshi

« previous php.internals (#10974) next »