Rumah > pembangunan bahagian belakang > C++ > Mengapa Struktur C dengan 3 Integer Pendek Mempunyai Saiz 6 Bait, Tetapi Struktur Serupa dengan Integer Ditambah Mempunyai Saiz 12 Bait?

Mengapa Struktur C dengan 3 Integer Pendek Mempunyai Saiz 6 Bait, Tetapi Struktur Serupa dengan Integer Ditambah Mempunyai Saiz 12 Bait?

Linda Hamilton
Lepaskan: 2024-10-26 13:53:02
asal
689 orang telah melayarinya

 Why Does a C Structure with 3 Short Integers Have a Size of 6 Bytes, But a Similar Structure with an Integer Added Has a Size of 12 Bytes?

Penjajaran Memori dalam Struktur C

Dalam pengkomputeran, penjajaran memori merujuk kepada sekatan yang diletakkan pada alamat di mana data boleh disimpan dalam memori . Memahami penjajaran memori adalah penting untuk mengoptimumkan prestasi kod dan mengelakkan tingkah laku yang tidak dijangka.

Pernyataan Masalah:

Anda sedang mengusahakan sistem 32-bit dengan penjajaran memori biasanya ditetapkan kepada 4 bait. Pertimbangkan struct berikut:

<code class="c">typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
} myStruct;</code>
Salin selepas log masuk

Struktur mengandungi tiga medan 2-bait, tetapi menggunakan operator sizeof mengembalikan 6 bait dan bukannya 8 bait yang dijangkakan. Sebaliknya, struct berikut:

<code class="c">typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
    int i;
} myStruct;</code>
Salin selepas log masuk

mengembalikan saiz 12 bait, seperti yang dijangkakan daripada peningkatan bilangan medan dan potensi untuk padding. Mengapakah terdapat perbezaan dalam saiz yang terhasil?

Penjelasan:

Pada kebanyakan mesin, jenis data diselaraskan dengan sempadan yang tidak lebih besar daripada saiznya. Dalam kes ini, pendek ialah 2 bait dan int ialah 4 bait.

  • Struktur Pertama:

    • Memandangkan semua ahli adalah 2 bait, struct dijajarkan dengan sempadan 2-bait.
    • Tiada padding dimasukkan antara ahli, menghasilkan jumlah saiz 6 bait.
  • Struktur Kedua:

    • Kehadiran int 4-bait memerlukan struct untuk diselaraskan dengan sempadan 4-bait.
    • 2 bait padding ialah dimasukkan antara v3 dan i untuk memastikan penjajaran yang betul, menjadikan jumlah saiz kepada 12 bait.

Atas ialah kandungan terperinci Mengapa Struktur C dengan 3 Integer Pendek Mempunyai Saiz 6 Bait, Tetapi Struktur Serupa dengan Integer Ditambah Mempunyai Saiz 12 Bait?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan