Kata kunci 'volatile' memainkan peranan penting dalam pengaturcaraan C, menangani isu berkaitan memori tertentu. Walaupun ia mungkin kelihatan tidak perlu dalam sesetengah kes, ia menjadi penting apabila menangani senario tertentu yang melibatkan memori dikongsi.
Tujuan utama 'meruap' adalah untuk menghalang pengkompil daripada mengoptimumkan kod dengan cara yang boleh membawa kepada salah keputusan. Khususnya, ia memastikan bahawa pengkompil tidak menyimpan cache nilai pembolehubah dan sentiasa mengambil nilai terkini terus daripada memori.
Satu situasi biasa di mana 'tidak menentu' diperlukan ialah apabila membaca dari lokasi memori yang boleh diubah suai oleh proses atau peranti luaran. Sebagai contoh, dalam sistem berbilang pemproses, berbilang pemproses mungkin berkongsi akses kepada kawasan memori yang sama. Jika satu pemproses menulis kepada pembolehubah yang dikongsi dan pemproses lain membaca pembolehubah tanpa menggunakan 'meruap', pemproses bacaan mungkin masih mempunyai nilai cache (lapuk).
Pertimbangkan perkara berikut kod:
volatile uint16_t* semPtr = WELL_KNOWN_SEM_ADDR; while ((*semPtr) != IS_OK_FOR_ME_TO_PROCEED);
Dalam contoh ini, pembolehubah 'semPtr' menghala ke lokasi memori kongsi yang digunakan sebagai semafor antara dua proses. Tanpa 'tidak menentu,' pengkompil mungkin mengoptimumkan gelung, dengan mengandaikan bahawa nilai '*semPtr' tidak pernah berubah. Ini akan membawa kepada tingkah laku yang salah, kerana proses membaca akan diteruskan sebelum proses penulisan mengeluarkan semafor.
Dengan menggunakan 'volatile', pengkompil terpaksa sentiasa mengambil nilai terkini '*semPtr' daripada ingatan, memastikan penyelarasan yang tepat antara proses.
Atas ialah kandungan terperinci Bila dan Mengapa Anda Memerlukan Kata Kunci 'tidak menentu' dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!