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 ;-)

--
Marc Glisse

Reply via email to