Seite 1 von 1

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

Verfasst: 26.01.2014, 11:10
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.

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

Verfasst: 26.01.2014, 11:46
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).

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

Verfasst: 26.01.2014, 12:30
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.

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

Verfasst: 26.01.2014, 12:54
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.

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

Verfasst: 26.01.2014, 13:00
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.