Используйте ленивую конструкцию из статических объектов.
Вместо того, чтобы создавать глобальные переменные, которые создаются при запуске, вот так:
Foo foo;
Bar bar;
int main()
{
// Access foo and bar
}
Сконструируйте их по требованию со следующей идиомой:
Foo & foo()
{
static Foo the_instance;
return the_instance;
}
Bar & bar()
{
static Bar the_instance;
return the_instance;
}
int main()
{
// Access objects through foo() and bar()
}
Это сэкономит вам некоторое время запуска, если создание дорогостоящих объектов (например, придется создавать большие справочные таблицы или выполнять тяжелый ввод-вывод).
Это не поможет при загрузке этих DLL.