Re: Using do_alloca() instead of emalloc()

From: Date: Sat, 22 Nov 2003 19:45:50 +0000
Subject: Re: Using do_alloca() instead of emalloc()
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-5669@lists.php.net to get a copy of this message
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:helly@php.net

« previous php.internals (#5669) next »