Visual Studio: #pragma optimization_level?
Verfasst: 16.07.2010, 20:00
Ahoi,
ich möchte meine Enumerationsmember nicht mit Präfixen versehen, weshalb ich diese in eine Wrapper-Klasse packe sowie einen Member des Typs der Aufzählung in der Klasse habe, auf den mittels überladener Operatoren und Konstruktor zugegriffen werden kann. Dass blöde ist nun, dass ich mangels aktiviertem Inlining beim Debuggen immer in die beiden überladenen Operatoren und den Konstruktor springe. Kann man in Visual Studio irgendwie einstellen, dass für diese Methoden beim Kompilieren ein anderes Optimierungslevel verwendet wird, als in den Compilereinstellungen gesetzt und diese Operatoren somit geinlined werden? Führt das zu längeren Kompilierungsdauern (sowohl hinsichtlich Wrapper als auch Optimization-Level-Modifikationen)? GCC kennt #pragma optimization_level (1|2|3|reset).
Wenn man im Debugmodus nun das Optimization-Level für bestimmte Funktionen bestimmen könnte, wäre es dann möglich, Wrapper-Klassen (ähnlich C# mit toString, fromString, aber auch cos, sin, sqrt, ...) für eingebaute Typen zu schreiben/generieren, allerdings ohne dabei enorme Performance-Verluste im Debugmodus durch non-inline Funktionsaufrufe zu erleiden oder in andere Schwierigkeiten zu geraten? Mit dem Optimization-Level /O2 kommt mit Wrapper der gleiche Assemblercode heraus wie ohne.
Mfg
ich möchte meine Enumerationsmember nicht mit Präfixen versehen, weshalb ich diese in eine Wrapper-Klasse packe sowie einen Member des Typs der Aufzählung in der Klasse habe, auf den mittels überladener Operatoren und Konstruktor zugegriffen werden kann. Dass blöde ist nun, dass ich mangels aktiviertem Inlining beim Debuggen immer in die beiden überladenen Operatoren und den Konstruktor springe. Kann man in Visual Studio irgendwie einstellen, dass für diese Methoden beim Kompilieren ein anderes Optimierungslevel verwendet wird, als in den Compilereinstellungen gesetzt und diese Operatoren somit geinlined werden? Führt das zu längeren Kompilierungsdauern (sowohl hinsichtlich Wrapper als auch Optimization-Level-Modifikationen)? GCC kennt #pragma optimization_level (1|2|3|reset).
Wenn man im Debugmodus nun das Optimization-Level für bestimmte Funktionen bestimmen könnte, wäre es dann möglich, Wrapper-Klassen (ähnlich C# mit toString, fromString, aber auch cos, sin, sqrt, ...) für eingebaute Typen zu schreiben/generieren, allerdings ohne dabei enorme Performance-Verluste im Debugmodus durch non-inline Funktionsaufrufe zu erleiden oder in andere Schwierigkeiten zu geraten? Mit dem Optimization-Level /O2 kommt mit Wrapper der gleiche Assemblercode heraus wie ohne.
Code: Alles auswählen
struct Scalar {
private:
float _t;
public:
Scalar(float t) : _t(t) {}
operator float() { return _t; }
Scalar& operator=(float t) { _t = t; return *this; }
// ...
static Scalar fromString(const char* t) { return atof(t); }
static Scalar cos(Scalar t) { return ::cosf(t); }
};
Mfg