Das ist jetzt nicht wirklich ein Problem, aber ich würde gerne die Zusammenhänge kennen.
Situation: Ich habe ein etwas umfangreicheres Projekt, in dem 3 Klassen eine identische Funktion benötigen. Diese hatte ich bisher einfach (identisch) in die neuen Klassen kopiert. Prinzipiell ist das natürlich blöd, weil der Code dann drei mal in der Binärdatei vorhanden ist. So mein Verständnis.
Daher habe ich gerade diese Funktion in eine andere Datei als Funktion mit eigenem namespace ausgelagert.
In den drei Klassen wird diese Funktion insgesamt sieben Mal aufgerufen. Ich hätte jetzt erwartet, dass die Binärdatei etwas kleiner wird, tut sie aber nicht. Die Größe bleibt mit 735096 Bytes gleich.
Liegt das jetzt daran, dass die Funktion sehr klein ist, oder kann der Compiler identische Funktionen in unterschiedlichen Klassen erkennen und eine entsprechende (zusammenfassende) Optimierung durchführen?
Die Frage interessiert mich deshalb, weil ich noch mehrere solche Kandidaten habe.
Die kleine Funktion, mit der ich angefanfen habe ist:
1 2 3 4 | #include <time.h> namespace VtCom { char * time2date( time_t * t ); } |
und
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <cstdio> #include "vt_commons.h" //----------------------------------------------------------------------------- // Convert the filetime to a human readable string. // The user should copy the result as soon as possible! char * VtCom::time2date( time_t * t ) { static char tstring[24]; // Not thread-save! tm * dt; dt = localtime( t ); snprintf( tstring, sizeof(tstring), "%4d-%02d-%02d %02d:%02d:%02d", dt->tm_year + 1900, dt->tm_mon + 1, dt->tm_mday, dt->tm_hour, dt->tm_min, dt->tm_sec ); return tstring; } |
Da frage ich mich natürlich, ob es überhaupt Sinn macht, über solche Zusammenfassungen nachzudenken. Wobei es zumindest auf Quelltextebene möglicherweise etwas übersichtlicher wäre.