From: Anthony Williams (anthony_w.geo_at_[hidden])
Date: 2006-10-30 05:00:44
Roland Schwarz <roland.schwarz_at_[hidden]> writes:
> Martin Bonner wrote:
>> You may be able to do a little better. The standard says "The storage
>> for objects with static storage duration (3.7.1) shall be
>> zeroinitialized (8.5) before any other initialization takes place."
>> What is more, most normal operating systems give programs pages of
>> memory that are zero-initialized, so compilers would have to do work to
>> avoid this.
>> I think that means you can declare constructors and STILL have the
>> object well behaved.
> Do you mean: the object might be already zero initialized before
> the ctor runs? If yes: this is very dangerous to rely on!
No. This is required. The memory for an object with static-storage-duration
MUST be zero initialized prior to the constructor running.
> 1) "Might": the standard does not require it.
> 2) E.g.: MSVC initializes memory to "CDCDCDCDCDCD...." in debugging
> builds, so there is at least one prominent case where the
> assumption is false.
It does this for automatic and heap-allocated objects (which is allowed). If
it did it for static objects, it would be non-conforming.
-- Anthony Williams Software Developer Just Software Solutions Ltd http://www.justsoftwaresolutions.co.uk
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk