Hello Andi,

Thursday, November 20, 2003, 10:48:57 AM, you wrote:

> Hey,

> I've been taking a look at the __autoload problem. During that time I saw 
> that lots of places in the code (especially reflection API) use 
> zend_str_tolower_dup().
> In most of these cases it would be much more efficient to use 
> do_alloca()/free_alloca() because that usually uses alloca() which 
> allocates on the stack.

Well Zeev and  you  told us to never it :-)

> Simplified example from reflection API code:

> lcname = zend_str_tolower_dup(name_str, name_len);

> if (zend_hash_find(&ce->properties_info, lcname, name_len + 1, (void **) 
> &property_info) == FAILURE) {
>       efree(lcname);
>       /* Error message */
>       return;
> }

> efree(lcname);

> This should really be:

> lcname = do_alloca(name_len+1);
> zend_str_tolower_copy(lcname, name_str, name_len+1);

> if (zend_hash_find(&ce->properties_info, lcname, name_len + 1, (void **) 
> &property_info) == FAILURE) {
>       free_alloca(lcname);
>       /* Error message */
>       return;
> }

> free_alloca(lcname);

> There are two times where you really shouldn't use do_alloca/free_alloca:
> a) If you're in code which requires a regular malloc() don't use them (the
> fallback is emalloc()).
> b) Only use them in functions which are about to return. They shouldn't be
> used in places like the main zend_execute loop because it would just make 
> the stack grow more and more (in almost all cases where 
> zend_str_tolower_dup() is being used, do_alloca/free_alloca are applicable).

> I need to go away for the weekend now but it be cool if people here would 
> at least take care of this in their code (such as reflection API code).

> Thanks,

> Andi




-- 
Best regards,
 Marcus                            mailto:[EMAIL PROTECTED]

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to