Rumah >pembangunan bahagian belakang >C++ >Mengapa Kelas Kosong dalam C Mempunyai Saiz 1 Bait, Bukan 0 Bait?
Memahami Saiz Objek Kelas Kosong
Dalam C , walaupun kelas yang kelihatan kosong mempunyai saiz bukan sifar. Seseorang mungkin menganggap ia akan menjadi 0 bait, tetapi ini tidak berlaku. Soalan ini menyelidiki sebab di sebalik tingkah laku ini.
Untuk menggambarkan ini, pertimbangkan atur cara berikut:
#include <iostream> using namespace std; class Empty {}; int main() { Empty e; cerr << sizeof(e) << endl; return 0; }
Jika seseorang menyusun atur cara ini, output pada pelbagai penyusun (cth., Visual C dan Cygwin-g ) adalah secara konsisten 1 bait. Ini mungkin kelihatan tidak dijangka kerana objek tidak mengandungi ahli data.
Mengapa 1 Bait?
Pengkompil memberikan saiz 1 bait kepada objek kelas kosong untuk memastikan bahawa objek yang berbeza mempunyai alamat yang unik. Perbezaan ini penting untuk pengurusan ingatan yang betul dan mengelakkan isu pengalianan.
Mengapa Tidak 4 Bait (Perkataan Mesin)?
Seseorang mungkin menjangkakan saiz objek akan diselaraskan dengan saiz perkataan mesin (32 atau 64 bit), tetapi ini tidak berlaku. Kebimbangan penjajaran menjadi tidak relevan untuk kelas kosong kerana tiada ahli data untuk diselaraskan. Akibatnya, pengkompil mengoptimumkan ruang dengan menetapkan saiz minimum yang boleh dilaksanakan: 1 bait.
Jusifikasi Saiz Bukan Sifar
Saiz 0 bait akan membayangkan bahawa dua objek kelas kosong boleh menduduki lokasi memori yang sama, menjadikannya mustahil untuk membezakan antara mereka. Kekaburan ini boleh membawa kepada tingkah laku yang tidak ditentukan dalam program. Oleh itu, saiz bukan sifar (dalam kes ini, 1 bait) memastikan alamat unik dan mengekalkan integriti program.
Atas ialah kandungan terperinci Mengapa Kelas Kosong dalam C Mempunyai Saiz 1 Bait, Bukan 0 Bait?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!