Rumah > pembangunan bahagian belakang > Golang > Mengapa Structs dengan Medan Sama tetapi Pesanan Berbeza Mempunyai Saiz Berbeza dalam Go?

Mengapa Structs dengan Medan Sama tetapi Pesanan Berbeza Mempunyai Saiz Berbeza dalam Go?

Linda Hamilton
Lepaskan: 2024-12-26 03:29:08
asal
336 orang telah melayarinya

Why Do Structs with Identical Fields but Different Orders Have Different Sizes in Go?

Saiz Struktur Berbeza dengan Susunan Medan Berbeza

Dalam kod yang disediakan, dua struct, A dan B, dengan medan yang sama tetapi susunan medan berbeza, menunjukkan saiz yang berbeza. Inilah sebabnya:

Padding Tersirat

Keperluan penjajaran memori untuk jenis data menentukan bahawa alamat medan mestilah gandaan nilai tertentu. Untuk medan int64, gandaan ini ialah 8 bait.

Dalam struct A, medan pertama ialah bool, yang mengambil masa 1 bait. Untuk menjajarkan medan int64 berikutnya pada sempadan 8 bait, 7 bait padding tersirat ditambah selepas a.

Dalam struct B, medan pertama ialah b jenis int64. Memandangkan ia sudah diselaraskan, hanya 3 bait padding tersirat diperlukan selepas a untuk menjajarkan medan int berikut, yang mengambil masa 4 bait.

Implikasi Saiz

Disebabkan oleh padding tersirat ini, saiz A ialah 24 bait (1 bait untuk a, 8 bait untuk b, dan 15 bait padding). Sementara itu, B ialah 16 bait (1 bait untuk a, 3 bait padding, 8 bait untuk b dan 4 bait untuk c).

Struktur Saiz Sifar

Struktur C diisytiharkan sepenuhnya kosong, menghasilkan saiz 0 bait. Menurut spesifikasi bahasa Go, struktur tanpa medan lebih besar daripada sifar mempunyai saiz sifar.

Kebolehalamatan dan Peruntukan Memori

Untuk nilai saiz sifar, bahasa membenarkan alamat memori yang sama untuk digunakan semula untuk pembolehubah yang berbeza. Ini bermakna untuk := C{}, tiada memori sebenarnya diperuntukkan oleh sistem.

Atas ialah kandungan terperinci Mengapa Structs dengan Medan Sama tetapi Pesanan Berbeza Mempunyai Saiz Berbeza dalam Go?. 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