This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: malloc attributes and realloc
On Sat, Jan 03, 2004 at 05:40:00AM +0100, Gabriel Dos Reis wrote:
> Robert Dewar <dewar@gnat.com> writes:
>
> | Gabriel Dos Reis wrote:
> |
> | > | can be safely optimized into
> | > | *p = 'a';
> | > That transformation caanot be applied for pointers returned by
> | > realloc, in general.
> |
> | Can you explain why?
>
> The reason is obvious.
>
> If p is a non-NULL pointer you get from a realloc, then it is
> guaranteed that the content of object previously pointed-to is still
> present at the start of new object. Therefore, the compiler cannot,
> in general, replace the test *p != 'a' by true.
Gaby, you may have missed the original example:
if (*p != 'a')
*p == 'a';
Either it's already 'a' or it gets set to 'a'. Depending on cache
behaviour and other issues already raised, this is a code-size win and
can be a performance win. The only reason not to transform it is if
the object is in read-only storage, which either C or most useful C
compilers (I don't know which) allows.
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer