Rumah >pembangunan bahagian belakang >C++ >Mengapa Kelas Kosong dalam C Mempunyai Saiz 1 Bait, Bukan 0 Bait?

Mengapa Kelas Kosong dalam C Mempunyai Saiz 1 Bait, Bukan 0 Bait?

Barbara Streisand
Barbara Streisandasal
2024-12-14 19:12:12167semak imbas

Why Do Empty Classes in C   Have a Size of 1 Byte, Not 0 Bytes?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn