Это более медленный подход, чтобы вернуться к более быстрому времени выполнения, но если вы хотите лучше понять, что вызывает большие изменения, вы можете провести несколько «экспериментов»
Одним из экспериментов было бы выяснить, какая функция может быть ответственна за большое изменение.
Для этого вы можете «профилировать» время выполнения каждой функции.
Например, используйте GNU gprof, часть GNU binutils:
http://www.gnu.org/software/binutils/
Документы по адресу: http://sourceware.org/binutils/docs-2.22/gprof/index.html
Это будет измерять время, затрачиваемое каждой функцией в вашей программе, и откуда она была вызвана. Выполнение этих измерений, вероятно, будет иметь «эффект Гейзенберга»; проведение измерений повлияет на производительность программы. Так что вы можете попробовать эксперимент, чтобы найти, какой класс имеет наибольшее значение.
Попытайтесь получить представление о том, как изменяется среда выполнения между наличием исходного кода класса в основном источнике и одной и той же программе, но с классом, скомпилированным и связанным по отдельности.
Чтобы получить реализацию класса в конечной программе, вы можете скомпилировать и связать ее, или просто #include ее в программу 'main', а затем скомпилировать main.
Чтобы было проще попробовать перестановки, вы можете включить или выключить #include с помощью #if:
#if defined(CLASSA) // same as #ifdef CLASSA
#include "classa.cpp"
#endif
#if defined(CLASSB)
#include "classb.cpp"
#endif
Затем вы можете контролировать, какие файлы # включены, используя флаги командной строки для компилятора, например,
g++ -DCLASSA -DCLASSB ... main.c classc.cpp classd.cpp classf.cpp
На создание команд -Dflags и команд ссылки может уйти всего несколько минут. Тогда у вас будет возможность сгенерировать все перестановки компиляции «в одном модуле» по сравнению с отдельно связанными, а затем запустить (и время) каждую из них.
Я предполагаю, что ваши заголовочные файлы упакованы в обычный
#ifndef _CLASSA_H_
#define _CLASSA_H_
//...
#endif
Тогда у вас будет некоторая важная информация о классе.
Эти типы экспериментов могут дать некоторое представление о поведении программы и компилятора, что может стимулировать некоторые другие идеи для улучшений.