Compiler-Optimierung von Heap-Speicherzuweisungen
Die Frage, ob ein Compiler seine Heap-Speicherzuweisungen optimieren kann, ergibt sich aus der Beobachtung, die einige Compiler durchführen diese Optimierung, während andere dies nicht tun. Insbesondere clang 3.0 und spätere Versionen optimieren den neuen Aufruf im folgenden Code:
int main() { int* mem = new int[100]; return 0; }
während g und Visual Studio dies nicht tun. Dies gibt Anlass zur Sorge, dass eine solche Optimierung gegen die As-if-Regel verstoßen könnte, die von Compilern verlangt, beobachtbares Verhalten zu erzeugen, als ob der Standard befolgt worden wäre.
Clang-Optimierung und die As-if-Regel
Die Geschichte der Clang-Optimierung gibt Aufschluss über ihre Gültigkeit. Die Optimierung von Clang folgt N3664, was solche Optimierungen ermöglicht. Die Kausalität dieser Entscheidung bleibt jedoch fraglich.
Alternativ könnte die As-If-Regel so interpretiert werden, dass sie eine solche Optimierung verbietet, da new eine Ausnahme auslösen kann, die sich auf beobachtbares Verhalten auswirken würde. Clang könnte jedoch argumentieren, dass es sich hierbei um ein Implementierungsdetail handelt und dass festgestellt wurde, dass keine Ausnahme ausgelöst wird.
Nicht auslösender Operator Neu
Das Argument für Das Wegoptimieren des Aufrufs auf die nicht werfende Version ist auch unter der Als-ob-Regel gültig. Wenn jedoch ein globaler Ersatzoperator new vorhanden ist, könnten Optimierungen möglicherweise gegen die Als-ob-Regel verstoßen. Clangs frühere überaggressive Optimierung, die sogar unsere create()-Aufrufe optimierte, wurde in späteren Versionen korrigiert.
Fazit
Die Fähigkeit des Compilers, unsere Heap-Speicherzuweisungen zu optimieren, bleibt bestehen Diskussionsthema mit möglichen Auswirkungen auf die Als-ob-Regel und das Verhalten des Codes. Während die Optimierung von clang durch N3664 zulässig ist, deuten einige Argumente darauf hin, dass es in bestimmten Situationen möglicherweise gegen die Als-ob-Regel verstoßen könnte. Für Entwickler ist es von entscheidender Bedeutung, sich dieser Feinheiten bewusst zu sein und die beobachtbaren Konsequenzen solcher Optimierungen zu berücksichtigen.
Das obige ist der detaillierte Inhalt vonKönnen Compiler die Zuweisung von Heap-Speicher optimieren, ohne die As-If-Regel zu verletzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!