Rumah >pembangunan bahagian belakang >C++ >Mengapa Pengkompil Tidak Mengoptimumkan Tulisan `std::atomic` Berturut-turut Berlebihan?

Mengapa Pengkompil Tidak Mengoptimumkan Tulisan `std::atomic` Berturut-turut Berlebihan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-15 06:34:14595semak imbas

Why Don't Compilers Optimize Consecutive Redundant `std::atomic` Writes?

Mengapa Penyusun Tidak Mencantumkan Lewah Berturut-turut std::Tulisan atom

Soalan:

Mengapa penyusun mengelak daripada menggabungkan tulisan berturut-turut dengan nilai yang sama kepada satu atom pembolehubah?

Jawapan:

Walaupun piawaian C 11 / C 14 membenarkan lipatan berbilang stor menjadi satu, pengkompil tidak melaksanakan pengoptimuman ini kerana:

Kualiti-Pelaksanaan Kebimbangan

1. Isu Bar Kemajuan:

Simpan gelung tenggelam dan lipatan boleh menyebabkan bar kemajuan kelihatan tersekat pada sifar sehingga ia melonjak kepada 100% pada penghujungnya, bukannya memaparkan kemajuan secara berperingkat.

2. Prinsip Kejutan Paling Sedikit:

Pengaturcara mengharapkan setiap penyata stor atom mempunyai operasi memori yang berasingan, dan bukannya dioptimumkan. Ini mengelakkan tingkah laku yang tidak dijangka.

3. Kes Penggunaan Terhad:

Penyusun telah menentukan bahawa senario di mana pengoptimuman ini akan memberi manfaat, seperti mengurangkan operasi kiraan ref shared_ptr yang tidak perlu, jarang berlaku.

Sekatan yang Dikenakan oleh Standard

1. Peraturan As-If:

Peraturan as-if membenarkan pengkompil menentukan susunan operasi memori, walaupun kod sumber menunjukkan sebaliknya. Ini membolehkan pengoptimuman dalaman yang boleh mengubah tingkah laku program.

Perkembangan Masa Depan

1. Sambungan API:

Perbincangan dalam kumpulan kerja C sedang dijalankan untuk melanjutkan std::atomic API untuk menyediakan kawalan ke atas gelagat pengoptimuman, membenarkan pengkompil mengoptimumkan apabila sesuai.

2. Pembolehubah Atom Meruap:

Menggunakan atom meruap memastikan bahawa storan kepada pembolehubah tidak boleh dioptimumkan, kerana akses kepada objek yang tidak menentu tidak dibenarkan untuk dialih keluar daripada kod. Walau bagaimanapun, pendekatan ini mempunyai batasannya sendiri, seperti yang dibincangkan dalam jawapan yang disediakan.

Atas ialah kandungan terperinci Mengapa Pengkompil Tidak Mengoptimumkan Tulisan `std::atomic` Berturut-turut Berlebihan?. 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