Dalam kod yang disediakan, dua struct, A dan B, dengan medan yang sama tetapi susunan medan berbeza, menunjukkan saiz yang berbeza. Inilah sebabnya:
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.
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 C diisytiharkan sepenuhnya kosong, menghasilkan saiz 0 bait. Menurut spesifikasi bahasa Go, struktur tanpa medan lebih besar daripada sifar mempunyai saiz sifar.
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!