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