With the improved optimizations of GCC 4.5.0 it is possible to have code that manipulates __malloc_hook before and after a call to malloc get optimized out. This is because GCC is assuming that malloc is a builtin function that does not access global variables, while GLIBC malloc does in fact rely on the global variable __malloc_hook. A detailed exposition of this is found in the GCC bugzilla: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44736 I am filing this bug in the GLIBC bugzilla as per a request from the GCC developer. A GCC developer suggested marking the __malloc_hook (and associated other hooks) as volatile in the GLIBC header file; however, this may or may not be the right thing to do.
I've added volatile since I don't mind if the hook use is slow.