In C wird der new-Operator üblicherweise zum Zuweisen von Speicher auf dem Heap verwendet. Es stellt sich jedoch die Frage, ob der Compiler diese Heap-Speicherzuweisungen optimieren darf.
Gemäß N3664: Clarifying Memory Allocation darf der Compiler rund um den Speicher optimieren Zuteilungen. Diese Optimierung basiert auf der „Als-ob“-Regel, die besagt, dass Implementierungen Anforderungen ignorieren können, solange das Ergebnis so aussieht, als ob die Anforderungen erfüllt wären. Da new eine Ausnahme auslösen kann, argumentieren einige, dass es aufgrund seines beobachtbaren Verhaltens nicht optimiert werden kann.
Befürworter der Optimierung behaupten jedoch, dass die Auch in diesem Fall gilt die „Als-ob“-Regel. Sie argumentieren, dass der Compiler feststellen kann, dass die Zuweisung keine Ausnahme auslöst und dass das Weglassen des neuen Aufrufs nicht gegen die Regel verstoßen würde. Darüber hinaus wird argumentiert, dass der Compiler nachweisen kann, dass kein globaler Ersatzoperator new das beobachtbare Verhalten beeinflussen würde, sodass er die Optimierung durchführen kann.
Während die meisten Compiler keine Optimierung durchführen Bei neuen Anrufen bestehen einige Ausnahmen. Clang beispielsweise hat die Optimierung implementiert, die später Teil von C 14 wurde. In Fällen, in denen eine nicht werfende Version von new verwendet wird oder ein Ersatzoperator new möglich ist, wird die Optimierung jedoch möglicherweise nicht durchgeführt.
Die Fähigkeit des Compilers, unsere Heap-Speicherzuweisungen zu optimieren, ist ein komplexes Thema mit unterschiedlichen Interpretationen der „Als-ob“-Regel. Während einige Implementierungen eine solche Optimierung unter bestimmten Bedingungen zulassen, halten sich andere strikt an den Standard und führen ihn nicht durch.
Das obige ist der detaillierte Inhalt vonKönnen C-Compiler die Zuweisung von Heap-Speicher mithilfe von „new' optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!