Compiler specific memory initialization
c++, gcc, memory, visual-studio, visual-studio-2010
Solution
You can somewhat affect the order of initialization by using compiler specific directives. MSVC has a pragma
#pragma init_seg({ compiler | lib | user | "section-name" [, func-name]} )
that can somewhat set the priority for a specific module. See this reference for init_seg.
The gcc compiler has a similar/related attribute syntax for setting the relative priority of a specific initialization. It looks like this
Some_Class A __attribute__ ((init_priority (2000)));
Some_Class B __attribute__ ((init_priority (543)));
and is explained on this page on init_priority.
Problem
Is there a way to ensure the order of static object initialization for certain objects for the entire program. I have memory allocators that I would like to be allocated as the first things in a program, as they will be used else where throughout the program and I want to use these allocators to allocate all later memory. I understand this is probably compiler specific as I don't believe the C++ standard allows this. The two compilers I am interested in doing this for is gcc and VS2010's compiler. If there is a way, could someone explain how? EDIT I do not want "construct on first use" because the allocators will be allocating a large block of memory that I want initialized at the start of the program.