Memahami Gelagat Alamat Memori dengan Pembolehubah dan Pemalar
Dalam coretan kod yang melibatkan pembolehubah const dan penunjuk kepadanya, pemerhatian yang berbeza nilai pada alamat memori yang sama meningkat soalan.
Kod Analisis
#include <iostream>
using namespace std;
int main() {
const int N = 22;
int * pN = const_cast<int*>(&N);
*pN = 33;
cout << N << '\t' << &N << endl;
cout << *pN << '\t' << pN << endl;
}
Salin selepas log masuk
Output
22 0x22ff74
33 0x22ff74
Salin selepas log masuk
Soalan
amati dua nilai yang berbeza (22 dan 33) pada masa yang sama alamat memori (0x22ff74)?
Jawapan
Bertentangan dengan pemerhatian, tidak ada dua nilai berbeza yang disimpan pada alamat memori yang sama. Ini adalah hasil daripada pengoptimuman pengkompil.
Pengkompil mempunyai kuasa untuk merawat sebarang sebutan pembolehubah const seolah-olah nilai masa kompilasi pembolehubah digunakan secara langsung. Dalam kod ini, pengkompil melihat kod sebagai:
int * pN = const_cast<int*>(&22);
*pN = 33;
Salin selepas log masuk
Pengkompil mempunyai haknya untuk menggunakan pengoptimuman ini. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pengkompil tidak terhad kepada tindakan ini. Ia mungkin menggunakan pengoptimuman lain, termasuk yang berpotensi memadamkan data pada pemacu keras anda jika anda terlibat dalam amalan berisiko seperti mengubah suai memori yang dikaitkan dengan pembolehubah const.
Atas ialah kandungan terperinci Mengapakah Mengubah suai Alamat Memori Pembolehubah `const` Menunjukkan Nilai Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!