Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Urusan tempahan Padang Golang?

Urusan tempahan Padang Golang?

WBOY
WBOYasal
2024-09-07 20:30:32691semak imbas

Salam, Gophers! Pada tahun awal bekerja dengan Golang, saya sentiasa berfikir bahawa mesti ada pesanan bidang dan saya fikir mengapa saya perlu bersusah payah mengenainya? Nah, ia hanya bidang, hanya sesuatu yang salah boleh jadi, saya betul? Seperti kebanyakan orang baru yang lain, saya fikir ia tidak patut diganggu. Dalam erti kata lain, betapa pentingnya medan tertentu dalam struktur, akan diletakkan dalam susunan tertentu? Baguslah!

Penyusunan medan adalah salah satu aspek yang diabaikan pada mulanya tetapi apabila seseorang meneruskan tutorial, pemahaman ini terutamanya tentang cara Go berfungsi dengan penunjuk difahami sebagai sangat kritikal. Sebenarnya, susunan inilah yang paling kritikal apabila ia datang untuk meningkatkan prestasi aplikasi terutamanya apabila bekerja dengan set data besar atau operasi yang terlalu berat pada ingatan. Kekurangan malang itu akan diperbaiki dalam pemahaman yang lebih baik mengapa ia sangat kritikal dengan pesanan medan Go.

Bagaimanakah Go Menyimpan Struktur Dalam Ingatan?

Apabila diletakkan dalam ingatan, struct diwakili sebagai blok ingatan berturut-turut, di mana semua medan terletak satu demi satu mengikut definisinya dalam struktur. Ini mungkin kelihatan agak mudah, tetapi organisasi linear jenis ini juga memainkan beberapa kesan yang agak ketara, terutamanya dalam bidang seperti penjajaran memori dan pelapik.

Penjajaran dan Padding Memori

Penjajaran memori ialah tentang cara data diletakkan dan diakses daripada memori. Biasanya, CPU boleh mempunyai berat sebelah dari segi tempat data diambil dalam ingatan, yang dirujuk sebagai sempadan penjajaran. Sebagai contoh, integer 32 bit harus diletakkan atau diambil dari alamat bait ke-4. Dalam kes di mana terdapat medan dalam struct anda yang tidak diselaraskan dengan betul, menyelak halaman, pengkompil Go boleh menambah bait padding, dan sebagainya. Ini menjadi agak membazir. Contohnya, lihat struct ini.

struct example{

a bool   // 1 byte

b int32 // 4bytes;

c bool   // 1byte 

d int64 //8 bytes
}

Golang Field ordering matters?

Dalam struct yang tidak betul ini kerana peraturan penjajaran, pengkompil Go mungkin menambah satu atau lebih bait padding di tengah medan ini:

  • a ialah 1 bait tetapi b mahu 4 bait sejajar dengan itu padding dimasukkan 3bait

  • b panjang ialah 4bait

  • panjang c ialah 1 bait tetapi untuk menjajarkan d yang memerlukan 8 bait terdapat 7asing maka padding diperkenalkan.

  • d panjang ialah 8 bait

Bagaimana kayu menjadi kayu struktur, masih bersaiz 24 kerana kaki walaupun kandungan hanya mengambil 14 namun lihat isipadu kandungan sebenar ditambah dengan pelapik .

Menyusun Semula Medan untuk Padding Minimum

Tertib medan dan pencarian struktur boleh membantu mengelakkan pembaziran ruang dalam bentuk margin negatif. Dalam erti kata lain:

type Example struct { 

d int64 // 8 bytes

b int32 // 4 bytes

a bool // 1 byte

c bool // 1 byte

}

Golang Field ordering matters?

Dalam struct dioptimumkan di atas:

  • d menduduki 8 bait.

  • b menduduki 4 bait.

  • a dan c menduduki 1 bait setiap satu tanpa memerlukan pelapik.

Struktur ini kini hanya bersaiz 16 bait dan ini lebih baik daripada struktur bersaiz 24 bait dahulu.

Mengapa Ini Penting

Apabila seseorang menganggap aplikasi berskala kecil biasa, dia kemungkinan besar akan mendapati jumlah memori yang digunakan oleh aplikasi itu tidak berbeza daripada yang terakhir. Walau bagaimanapun, ini tidak berlaku dalam pembinaan di mana prestasi dan juga ruang memori adalah kritikal pertimbangkan sistem terbenam, aplikasi perdagangan frekuensi tinggi yang sangat pantas, atau aplikasi yang bertujuan untuk memproses sebahagian besar data yang sekatan setia ini boleh ditambah dengan pantas. Ini menjadi lebih jelas apabila seseorang membina atau mengendalikan menggunakan banyak tatasusunan besar atau kepingan struct yang digabungkan. Tidak semudah untuk melihat penyatuan berat sebelah atau beban apabila struktur hanya mempunyai kapasiti yang lebih tinggi beberapa bait. Apabila seni bina ingatan rendah dihasilkan secara besar-besaran, dengan jumlah berjuta-juta contoh yang perlu dikendalikan, sedikit demi sedikit, dos berlebihan bahan buangan yang ketagih ini tidak lagi didengari.

Kesimpulan

Medan pesanan bukan sahaja bagus dari sudut pandangan reka bentuk struktur Golang tetapi juga memainkan peranan penting dalam pengoptimuman memori. Memahami aspek ini tentang cara Go melakukan susun atur memori untuk struct anda dan pikselnya membolehkan reka bentuk struct yang lebih berkesan dalam amalan. Pelarasan yang tidak ketara seperti itu boleh menyebabkan peningkatan prestasi yang besar apabila aplikasi yang menggunakan memori yang banyak berkenaan. Apabila peluang seterusnya datang untuk anda mentakrifkan struct dalam Go, jangan hanya menumpahkan medan tersebut. Sebaliknya, luangkan satu minit untuk mempertimbangkan urutan itu- anda akan berterima kasih kepada diri sendiri dan permohonan anda untuknya pada hari-hari yang akan datang!

Atas ialah kandungan terperinci Urusan tempahan Padang Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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