calloc = malloc + memset

Andi Kleen andi@firstfloor.org
Mon Jun 23 19:37:00 GMT 2014


On Mon, Jun 23, 2014 at 09:00:02PM +0200, Marc Glisse wrote:
> On Mon, 23 Jun 2014, Andi Kleen wrote:
> 
> >FWIW i believe the transformation will break a large variety of micro benchmarks.
> >
> >calloc internally knows that memory fresh from the OS is zeroed.
> >But the memory may not be faulted in yet.
> >
> >memset always faults in the memory.
> >
> >So if you have some test like
> >
> >  buf = malloc(...)
> >  memset(buf, ...)
> >  start = get_time();
> >  ... do something with buf
> >  end = get_time()
> >
> >Now the times will be completely off because the measured times includes
> >the page faults.
> 
> Good point. I guess working around compiler optimizations is part of
> the game for micro benchmarks, and their authors would be
> disappointed if the compiler didn't mess it up regularly in new and
> entertaining ways ;-)

I would prefer to not do it. I'm not sure it has a lot of benefit.
If you want to keep it please make sure there is an easy way to turn
it off.

-Andi
-- 
ak@linux.intel.com -- Speaking for myself only.



More information about the Gcc-patches mailing list