On Mon, Jul 8, 2013 at 2:06 AM, Maxime Villard <rusty...@gmx.fr> wrote: > Ah, yes. I didn't know.
For what it's worth, this is specified in C99 §6.7.8 (Initializaton) paragraph 10: "If an object that has static storage duration is not initialized explicitly, then: — if it has pointer type, it is initialized to a null pointer; — if it has arithmetic type, it is initialized to (positive or unsigned) zero; — if it is an aggregate, every member is initialized (recursively) according to these rules; — if it is a union, the first named member is initialized (recursively) according to these rules." On OpenBSD (and most, if not all, ELF platforms), this is implemented by assigning these objects into the .bss section, which is initialized to all zero bytes at program startup, taking advantage of the fact that all of our platforms represent null pointers and zero values as sequences of zero bytes.