Heim >Backend-Entwicklung >C++ >Können Compiler „neue' Aufrufe in C wegoptimieren?

Können Compiler „neue' Aufrufe in C wegoptimieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-02 00:19:15703Durchsuche

Can Compilers Optimize Away `new` Calls in C  ?

Kann der Compiler Heap-Speicherzuweisungen eliminieren?

In C wird der neue Operator verwendet, um Speicher auf dem Heap zuzuweisen. Compiler können Code optimieren, einschließlich der Entfernung unnötiger Anweisungen. Können Compiler Heap-Speicherzuweisungen eliminieren, die mit new vorgenommen wurden?

Compiler-Verhalten

Untersuchungen zeigen, dass verschiedene Compiler Heap-Zuweisungen unterschiedlich handhaben:

  • g (5.2.0) und Visual Studio 2015 optimieren das Neue nicht Aufruf.
  • clang (3.0) optimiert den neuen Aufruf, auch bei vollständigen Optimierungsflags.

Gültigkeit der Optimierung

Die Gültigkeit von Compiler-Optimierungen ist Gegenstand von Debatten. Einige argumentieren, dass der Compiler neue Aufrufe nicht optimieren darf, da diese möglicherweise ein beobachtbares Verhalten aufweisen (z. B. das Auslösen einer Ausnahme). Andere behaupten, dass die Optimierung neuer Aufrufe zulässig ist, wenn der Compiler garantieren kann, dass kein beobachtbares Verhalten beeinträchtigt wird.

C 14 Standard

N3664: Clarifying Memory Allocation hat das geklärt Regeln bezüglich Compileroptimierungen und Speicherzuweisung. Es ermöglicht Compilern, die Speicherzuweisungen in bestimmten Szenarien zu optimieren. Die Bestimmung wurde jedoch kritisiert, da sie möglicherweise gegen die Kausalität verstößt.

Zusätzliche Überlegungen

  • Nicht werfend neu: Clang optimiert auch Anrufe an den nicht werfenden neuen Operator.
  • Überschriebener Operator neu: Neue Implementierungen benutzerdefinierter globaler Operatoren in verschiedenen Übersetzungseinheiten könnten sich auf die Gültigkeit von Compiler-Optimierungen im Zusammenhang mit Heap-Zuweisungen auswirken.

Schlussfolgerung

Der Compiler Die Möglichkeit, unsere Heap-Speicherzuweisungen zu optimieren, ist ein komplexes Thema, das Compilerverhalten, Sprachstandards und mögliche Ausnahmen betrifft. Während einige Compiler diese Optimierung auf Basis von N3664 implementieren, bleibt ihre Gültigkeit Gegenstand von Diskussionen und hängt von bestimmten Umständen ab, einschließlich des C-Standards und dem Vorhandensein benutzerdefinierter Speicherzuweiser.

Das obige ist der detaillierte Inhalt vonKönnen Compiler „neue' Aufrufe in C wegoptimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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