Mengapakah saiz struktur C dengan ahli pendek tidak selalunya gandaan saiz ahli?

Barbara Streisand
Lepaskan: 2024-10-26 13:00:29
asal
526 orang telah melayarinya

Why is the size of a C struct with short members not always a multiple of the member size?

Memahami Penjajaran Memori dalam Struktur C

Penjajaran memori ialah konsep penting dalam pengaturcaraan C kerana ia memberi kesan kepada cara data disimpan dalam ingatan dan diakses oleh pemproses. Dalam konteks struct, penjajaran memori menentukan cara ahli individu struct dibentangkan dalam memori.

Pertimbangkan struct berikut:

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

Pada mesin 32-bit di mana penjajaran memori biasanya ditetapkan kepada 4 bait, seseorang akan menjangkakan jumlah saiz struct ini ialah 8 bait. Walau bagaimanapun, operator sizeof(myStruct) hanya mengembalikan 6 bait.

Percanggahan timbul kerana setiap ahli struct, sebagai pendek yang tidak ditandatangani, mempunyai saiz 2 bait. Oleh kerana semua ahli mempunyai saiz yang sama, tiada padding dimasukkan di antara mereka. Akibatnya, struct menduduki 6 bait dalam ingatan.

Sekarang, mari kita ubah suai struct:

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

Dalam kes ini, kehadiran ahli int, yang mempunyai saiz 4 bait, menukar penjajaran memori struct. Ahli int mesti diselaraskan pada sempadan 4-bait. Oleh kerana ia didahului oleh 6 bait, 2 bait padding dimasukkan antara v3 dan i. Ini menjadikan jumlah saiz struct kepada 12 bait, seperti yang disahkan oleh sizeof(myStruct).

Ringkasnya, penjajaran memori dalam struct C memastikan ahli diselaraskan dengan betul dalam memori untuk mengoptimumkan prestasi pemproses dan mengurangkan penggunaan memori . Jenis hanya diselaraskan dengan sempadan sebesar jenis itu sendiri. Apabila jenis yang lebih besar diperkenalkan, ia menetapkan penjajaran untuk keseluruhan struktur, berpotensi memperkenalkan padding untuk mengekalkan penjajaran yang diingini.

Atas ialah kandungan terperinci Mengapakah saiz struktur C dengan ahli pendek tidak selalunya gandaan saiz ahli?. 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!