[C++] Compiler-Optimierungen bei Impl-Klassen

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Niki
Establishment
Beiträge: 309
Registriert: 01.01.2013, 21:52

[C++] Compiler-Optimierungen bei Impl-Klassen

Beitrag von Niki »

Hi,

ich verstecke gerne gewisse Implementierungs-Details in Klassen. Beispielsweise habe ich eine Klasse AssetManager welches die öffentlichen Methoden zur Verfügung stellt. Davon abgeleitet habe ich eine Klasse AssetManager::Impl, welche die interne Implementierung enthält.

In AssetManager habe ich dann Methoden, die an AssetManager::Impl weiterleiten. Zum Beispiel so:

Code: Alles auswählen

bool AssetManager::isAssetLoaded(const std::string & rFilePath) const
{
    const Impl & rImpl = static_cast<const Impl &>(*this);
    return rImpl.isAssetLoaded(rFilePath);
}

inline bool AssetManager::Impl::isAssetLoaded(const std::string & rFilePath) const
{
    return irgendwas;
}
Ich frage mich nun, ob der Compiler diese Zwischenmethode wegoptimiert und direkt AssetManager::Impl::isAssetLoaded aufruft? Und wenn ja, kann AssetManager::Impl::isAssetLoaded dann zudem noch ge-inlined werden?

Ich würde ja selber nachschauen, aber die Assembler-Listings sind mir mittlerweile zu komplex geworden.
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [C++] Compiler-Optimierungen bei Impl-Klassen

Beitrag von Krishty »

Ja das wird voll optimiert; sowohl mit Inlining als auch mit Constant Propagation etc (ich mache hier genau das gleiche mit meinem Renderer, unter Visual C++ 2012).

Ab und zu bemerke ich Aliasing-Probleme; aber die scheinen auch ohne versteckte Implementierung aufzutreten (und sind nicht soooo schlimm).
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Niki
Establishment
Beiträge: 309
Registriert: 01.01.2013, 21:52

Re: [C++] Compiler-Optimierungen bei Impl-Klassen

Beitrag von Niki »

Krishty hat geschrieben:Ja das wird voll optimiert; sowohl mit Inlining als auch mit Constant Propagation etc
Vielen Dank, Krishty!

Das sind Tolle Neuigkeiten, weil ich das Verfahren jetzt endlich mit einem besseren Gefühl benutzen kann. Momentan sitze ich an einem Sprite-Batch-Renderer wo ich das einsetzen möchte, und ich hatte ein wenig Panik, dass der für jeden Draw und jeden Setter irgendwelche Indirektionen durchläuft.

Danke nochmals.
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [C++] Compiler-Optimierungen bei Impl-Klassen

Beitrag von Krishty »

Gern. Was mir allerdings bei dieser Möglichkeit auf den Zwirn geht, ist der ganze doppelte Code: Die Methodendeklarationen wiederholen; alle Parameterlisten abtippen; usw.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Niki
Establishment
Beiträge: 309
Registriert: 01.01.2013, 21:52

Re: [C++] Compiler-Optimierungen bei Impl-Klassen

Beitrag von Niki »

Ja, das geht mir auch ein wenig auf den Nerv. Ich werde aber damit leben, weil mir ein sauberes Interface recht wichtig ist.
Antworten