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:
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.
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.
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
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!