


Pemesanan dan Saiz Medan Struktur
Kod yang disediakan menunjukkan tingkah laku yang menarik:
struktur jenis A {
a bool b int64 c int
}
jenis B struct {
b int64 a bool c int
}
Apabila mencetak saiz A{} dan B{} menggunakan tidak selamat.Sizeof, kami memperoleh yang mengejutkan hasil:
fmt.Println(unsafe.Sizeof(A{})) // Output: 24
fmt.Println(unsafe.Sizeof(B{})) / / Output: 16
Mengapa adakah struct ini mempunyai saiz yang berbeza walaupun mempunyai medan yang sama?
Penjajaran Medan
Jawapannya terletak pada penjajaran medan. Dalam Go, alamat pembolehubah mesti diselaraskan berdasarkan jenisnya dan penjajaran ini amat penting untuk jenis seperti int64 (penjajaran 8 bait). Dalam kes A, medan pertama a ialah bool, yang memerlukan hanya 1 bait storan. Selepas medan ini, terdapat padding tersirat 7-bait untuk menjajarkan medan seterusnya b (jenis int64) pada sempadan 8-bait. Walau bagaimanapun, dalam kes B, memandangkan medan pertama b sudah dijajarkan pada sempadan 8 bait, tidak ada keperluan untuk sebarang padding tersirat, menghasilkan saiz struktur yang lebih kecil iaitu 16 bait.
Saiz Struktur Kosong
Seterusnya, kita akan menemui satu lagi yang menarik kes:
struktur jenis C {
}
Apabila mencetak tidak selamat.Saiz(C{}), kami secara tidak dijangka dapatkan output 0. Bagaimanakah ini boleh dilakukan, memandangkan setiap struct menduduki beberapa memori?
Nilai Saiz Sifar
Spesifikasi Go menyatakan bahawa struktur atau tatasusunan tanpa medan atau elemen dengan saiz lebih besar daripada sifar mempunyai saiz sifar. Ia juga membayangkan bahawa dua pembolehubah saiz sifar yang berbeza mungkin berkongsi alamat memori yang sama. Ini adalah kes dengan C{}, yang mempunyai saiz sifar dan mungkin tidak menduduki sebarang memori sebenar. Sebaliknya, ia boleh merujuk alamat memori yang sama seperti nilai saiz sifar yang lain, seperti struct{}{}, []int{}, atau juga tatasusunan kosong [3]struct{}{}.
Kesimpulan
Memahami penjajaran medan dan konsep nilai saiz sifar meningkatkan pemahaman kita tentang Pengurusan ingatan Go. Dengan menyusun medan secara strategik dalam struktur, kami boleh mengoptimumkan peruntukan memori dan memastikan manipulasi data yang cekap.
Atas ialah kandungan terperinci Mengapa Go Structs dengan Medan yang Sama Mempunyai Saiz Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel ini menunjukkan penciptaan dan stub di GO untuk ujian unit. Ia menekankan penggunaan antara muka, menyediakan contoh pelaksanaan mengejek, dan membincangkan amalan terbaik seperti menjaga mocks fokus dan menggunakan perpustakaan penegasan. Articl

Artikel ini meneroka kekangan jenis adat Go untuk generik. Ia memperincikan bagaimana antara muka menentukan keperluan jenis minimum untuk fungsi generik, meningkatkan keselamatan jenis dan kebolehgunaan semula kod. Artikel ini juga membincangkan batasan dan amalan terbaik

Artikel ini membincangkan ujian unit menulis di GO, meliputi amalan terbaik, teknik mengejek, dan alat untuk pengurusan ujian yang cekap.

Artikel ini meneroka menggunakan alat pengesanan untuk menganalisis aliran pelaksanaan aplikasi GO. Ia membincangkan teknik instrumentasi manual dan automatik, membandingkan alat seperti Jaeger, Zipkin, dan OpenTelemetry, dan menonjolkan visualisasi data yang berkesan

Artikel ini menerangkan cara menggunakan alat PPROF untuk menganalisis prestasi GO, termasuk membolehkan profil, mengumpul data, dan mengenal pasti kesesakan biasa seperti CPU dan isu memori.

Artikel ini membincangkan pakej GO's Reflect, yang digunakan untuk manipulasi kod runtime, bermanfaat untuk siri, pengaturcaraan generik, dan banyak lagi. Ia memberi amaran tentang kos prestasi seperti pelaksanaan yang lebih perlahan dan penggunaan memori yang lebih tinggi, menasihati penggunaan yang bijak dan terbaik

Artikel ini membincangkan menguruskan kebergantungan modul Go melalui Go.Mod, meliputi spesifikasi, kemas kini, dan resolusi konflik. Ia menekankan amalan terbaik seperti versi semantik dan kemas kini biasa.

Artikel ini membincangkan menggunakan ujian yang didorong oleh jadual di GO, satu kaedah yang menggunakan jadual kes ujian untuk menguji fungsi dengan pelbagai input dan hasil. Ia menyoroti faedah seperti kebolehbacaan yang lebih baik, penurunan duplikasi, skalabiliti, konsistensi, dan a


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Dreamweaver Mac版
Alat pembangunan web visual

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma
