
Daniel Veillard wrote:
On Wed, Mar 21, 2007 at 01:55:35PM +0000, Mark McLoughlin wrote:
- I think the use case is a little different - generally in libvirt, we're only allocating very small chunks where the CPU hit for initialisation would be negligible and would never show up on a profile. I'd prefer to take the minor hit of zero-initialising most/all memory for programming ease.
- If our wrappers always zero-initialise, we don't need the "initialise to -1 when debugging" thing.
- If we rely on calloc() zero-initialising in our wrappers, we give opportunity for libc to optimise where it knows the memory is already initialised - e.g. where it's mmap()ing the memory from /dev/zero
okay, okay, let's use calloc() for libvirt, but then there is a number of places where I probably used memset() for zeroing, they should all be cleaned up.
<pedant> Note that neither calloc nor memset really work on unusual architectures where null pointers aren't represented by all-bits-zero. So code like: struct { void *ptr; } *s; s = malloc (sizeof (*s)); memset (s, 0, sizeof (*s)); /* ... */ if (s->ptr == NULL) { do something } isn't portable. There's some really strange stuff here about this: http://www.ex-parrot.com/~chris/random/initialise.html </pedant> Rich. -- Emerging Technologies, Red Hat http://et.redhat.com/~rjones/ 64 Baker Street, London, W1U 7DF Mobile: +44 7866 314 421 "[Negative numbers] darken the very whole doctrines of the equations and make dark of the things which are in their nature excessively obvious and simple" (Francis Maseres FRS, mathematician, 1759)