Menyingkap Saiz Objek Kelas Kosong
Menentukan saiz objek kepunyaan kelas kosong mungkin kelihatan seperti siasatan remeh, tetapi ia menyembunyikan kerumitan yang menarik.
Dalam C , kelas kosong pada asasnya ialah pemegang tempat, tidak mempunyai sebarang ahli atau kaedah data. Kebijaksanaan konvensional mungkin mencadangkan bahawa objek sedemikian tidak boleh menduduki ruang ingatan. Walau bagaimanapun, itu tidak berlaku.
Teka-teki: Saiz Sifar atau Bukan Sifar?
Pada pandangan pertama, nampaknya munasabah untuk mengharapkan objek kelas kosong akan mempunyai saiz 0 bait. Lagipun, ia tidak mengandungi maklumat yang ketara. Walau bagaimanapun, percubaan untuk merujuk atau memberikan penuding kepada objek kelas kosong menunjukkan bahawa ia mesti mempunyai saiz bukan sifar.
Eksperimen Mendedahkan
Dengan melaksanakan yang mudah atur cara yang mencipta objek kelas kosong dan mengeluarkan saiznya, menjadi jelas bahawa objek itu sememangnya mempunyai saiz 1 bait. Tingkah laku ini konsisten merentas pelbagai penyusun, termasuk Visual C dan Cygwin-g .
Kes Curious Enigma 1-Byte
Kejutan awal berpunca daripada jangkaan bahawa objek kelas kosong akan menduduki saiz yang sama dengan perkataan mesin (biasanya 32 atau 64 bit). Walau bagaimanapun, peruntukan saiz 1 bait dibenarkan oleh pertimbangan penjajaran.
Memandangkan objek kelas kosong tidak mengandungi data sebenar, penjajarannya adalah tidak penting. Ini membolehkan pengkompil memperuntukkan satu bait untuk objek, walaupun seni bina asas memerlukan penjajaran yang lebih besar untuk objek bukan kosong.
Mengapa Bukan Sifar Bait?
Walaupun objek kelas kosong tidak mempunyai data yang berkaitan, ia mesti mempunyai alamat unik. Keperluan ini timbul daripada peraturan asas bahawa objek yang berbeza mesti mempunyai alamat yang berbeza. Jika objek kelas kosong mempunyai saiz 0-bait, berbilang objek boleh dibayangkan menduduki alamat yang sama, yang akan melanggar prinsip ini.
Kesimpulan
Tugas yang kelihatan remeh menentukan saiz objek kelas kosong mendedahkan nuansa halus yang wujud dalam bahasa C. Walaupun tidak mengandungi data eksplisit, objek kelas kosong memerlukan saiz bukan sifar untuk memastikan alamat unik dan mematuhi kekangan penjajaran.
Atas ialah kandungan terperinci Mengapa Objek Kelas C Kosong Mempunyai Saiz 1 Bait?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!