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
578 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!

sumber:php.cn
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!