Rumah >pembangunan bahagian belakang >C++ >Bolehkah Pengkompil Mengoptimumkan Panggilan `baru` dalam C ?

Bolehkah Pengkompil Mengoptimumkan Panggilan `baru` dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-02 00:19:15709semak imbas

Can Compilers Optimize Away `new` Calls in C  ?

Bolehkah Pengkompil Menghapuskan Peruntukan Memori Timbunan?

Dalam C , operator baharu digunakan untuk memperuntukkan memori pada timbunan. Penyusun boleh mengoptimumkan kod, termasuk mengalih keluar pernyataan yang tidak perlu. Bolehkah penyusun menghapuskan peruntukan memori timbunan yang dibuat menggunakan baharu?

Gelagat Pengkompil

Penyelidikan menunjukkan bahawa penyusun berbeza mengendalikan peruntukan timbunan secara berbeza:

  • g (5.2.0) dan Visual Studio 2015 tidak mengoptimumkan yang baharu panggilan.
  • clang (3.0 ) mengoptimumkan panggilan baharu, walaupun dengan bendera pengoptimuman penuh.

Kesahihan Pengoptimuman

Kesahihan pengoptimuman pengkompil adalah subjek perdebatan. Sesetengah berpendapat bahawa pengkompil tidak dibenarkan untuk mengoptimumkan panggilan baharu kerana mereka mungkin mempunyai tingkah laku yang boleh diperhatikan (cth., membuang pengecualian). Yang lain berpendapat bahawa mengoptimumkan panggilan baharu dibenarkan jika pengkompil boleh menjamin bahawa tiada tingkah laku yang boleh diperhatikan akan terjejas.

C 14 Standard

N3664: Menjelaskan Peruntukan Memori menjelaskan peraturan mengenai pengoptimuman pengkompil dan peruntukan memori. Ia membolehkan penyusun mengoptimumkan sekitar peruntukan memori dalam senario tertentu. Walau bagaimanapun, peruntukan tersebut telah dikritik kerana ia berpotensi melanggar kausalitas.

Pertimbangan Tambahan

  • Bukan melontar baharu: Clang juga mengoptimumkan keluar panggilan kepada yang tidak membuang baru operator.
  • Baharu operator dibatalkan: Pelaksanaan baharu operator global tersuai dalam unit terjemahan berbeza boleh menjejaskan kesahihan pengoptimuman pengkompil yang berkaitan dengan peruntukan timbunan.

Kesimpulan

Keupayaan pengkompil untuk mengoptimumkan memori timbunan peruntukan ialah isu kompleks yang melibatkan tingkah laku pengkompil, piawaian bahasa dan kemungkinan pengecualian. Walaupun sesetengah penyusun melaksanakan pengoptimuman ini berdasarkan N3664, kesahihannya kekal sebagai subjek perbincangan dan bergantung pada keadaan tertentu, termasuk standard C dan kehadiran pengagih memori tersuai.

Atas ialah kandungan terperinci Bolehkah Pengkompil Mengoptimumkan Panggilan `baru` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn