Rumah >pembangunan bahagian belakang >C++ >Mengapakah Kelas Kosong dalam C Menduduki 1 Bait Memori?
Size Objek Kelas Kosong dalam C
Penyiasatan ini menyelidiki persoalan menarik tentang saiz objek kelas kosong. Tidak seperti kebanyakan objek, yang menggambarkan data khusus yang dipegangnya, kelas kosong tidak mempunyai sebarang pembolehubah ahli. Ini menimbulkan persoalan sama ada objek sedemikian benar-benar boleh menduduki sebarang memori sama sekali, atau jika ia mungkin wujud dalam keadaan yang lebih halus.
Pertimbangkan program mudah berikut:
#include <iostream> using namespace std; class Empty {}; int main() { Empty e; cerr << sizeof(e) << endl; return 0; }
Bila dilaksanakan, program ini menghasilkan output yang mengejutkan: 1 bait. Keputusan ini ditemui merentas penyusun dan seni bina yang berbeza, mencadangkan sifat asas objek kelas kosong.
Mengapa Bukan Sifar?
Timbul persoalan mengapa kelas kosong objek tidak akan bersaiz sifar. Secara intuitif, nampaknya objek kosong tidak sepatutnya menduduki ruang. Walau bagaimanapun, andaian ini mengabaikan keperluan kritikal untuk identiti objek unik.
Dalam C , setiap objek mempunyai alamat memori yang unik. Alamat ini penting untuk merujuk dan memanipulasi objek. Walaupun objek tidak mengandungi data, alamatnya yang berbeza memastikan ia boleh dibezakan daripada objek lain dalam program.
Mengapa Bukan Saiz Machine Word?
Satu lagi jangkaan mungkin bahawa objek kelas kosong akan menduduki saiz perkataan mesin asli (biasanya 4 bait). Walau bagaimanapun, ini tidak berlaku atas beberapa sebab.
Implikasi
Saiz bukan sifar bagi objek kelas kosong mempunyai beberapa implikasi:
Kesimpulan
Ringkasnya, objek kelas kosong dalam C menduduki 1 bait dalam ingatan. Saiz bukan sifar ini memastikan keunikan identiti objek dan menangani sekatan penjajaran sambil menawarkan faedah peruntukan memori padat. Memahami tingkah laku ini adalah penting apabila mereka bentuk dan melaksanakan program C yang melibatkan penggunaan kelas kosong.
Atas ialah kandungan terperinci Mengapakah Kelas Kosong dalam C Menduduki 1 Bait Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!