Heim > Backend-Entwicklung > C++ > Können Compiler die Zuweisung von Heap-Speicher optimieren, ohne die As-If-Regel zu verletzen?

Können Compiler die Zuweisung von Heap-Speicher optimieren, ohne die As-If-Regel zu verletzen?

DDD
Freigeben: 2024-12-04 01:53:10
Original
930 Leute haben es durchsucht

Can Compilers Optimize Out Heap Memory Allocations Without Violating the As-if Rule?

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage