Boost logo

Boost :

From: Martin Bonner (martin.bonner_at_[hidden])
Date: 2006-10-30 07:11:53


From: Roland Schwarz
> 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.
>
> Sorry, I do not understand "so compilers would have to do work to
> avoid this". Could you please try to state it with different
> wording?

It is a requirement of the standard that static objects are zero
initialized before the constructor runs. Compilers sometimes fail to
implement the standard for various reasons (backwards compatibility,
bugs, etc). What I am saying is that the natural way of implementing
static objects on most implementations will automatically meet this
requirement of the standard - so it is fairly safe to rely on.
>
>> 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!
>
> 1) "Might": the standard does not require it.

But the standard DOES require it for STATIC objects (which is what you
were worrying about the order of initialization for).
>
> 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 only initializes heap memory to CD - not "objects with static storage
duration".

-- 
Martin Bonner
Martin.Bonner_at_[hidden]
Pi Technology, Milton Hall, Ely Road, Milton, Cambridge, CB24 6WZ,
ENGLAND Tel: +44 (0)1223 203894

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk