Panjang Maksimum Slice dalam Go
Soalan ini meneroka saiz maksimum kepingan yang boleh dibuat dalam Go dan faktor-faktor yang tentukan had.
Dalam Go, hirisan digunakan untuk menyimpan koleksi nilai tersusun. Panjang kepingan merujuk kepada bilangan elemen yang terkandung di dalamnya dan kapasitinya merujuk kepada bilangan maksimum elemen yang boleh disimpan tanpa perlu memperuntukkan memori tambahan.
Jenis int menentukan saiz kepingan dalam Pergi. Bergantung pada binaan sasaran, saiz int boleh menjadi 32-bit atau 64-bit. Ini bermakna kapasiti maksimum kepingan ditentukan oleh saiz integer lalai pada binaan sasaran.
Apabila cuba mencipta kepingan dengan saiz lebih besar daripada kapasiti maksimum yang dibenarkan oleh saiz integer, berbeza mesej ralat boleh berlaku bergantung pada keadaan.
Sebagai contoh, dalam OS Linux 64-bit dengan memori 4GB, penciptaan kepingan berikut gagal dengan "ralat maut: runtime: out of memory":
r := make([]bool, math.MaxUint32)
Sementara itu, penciptaan hirisan berikut gagal dengan "panic: runtime error: makeslice: len di luar julat":
r := make([]bool, math.MaxInt64)
Ini kerana matematik.MaxUint32 ialah 32-bit integer tidak bertanda, manakala math.MaxInt64 ialah integer bertanda 64-bit. Masa jalanan Go menjalankan semakan keselamatan untuk memastikan saiz kepingan tidak melebihi maksimum yang dibenarkan oleh jenis indeks.
Menariknya, jika jenis elemen kepingan mempunyai saiz sifar, seperti struct{}, ia adalah mungkin untuk mencipta kepingan dengan saiz matematik.MaxInt64:
r := make([]struct{}, math.MaxInt64)
Ini kerana jenis elemen bersaiz sifar tidak memerlukan memori dan semakan masa jalan untuk peruntukan memori tidak dicetuskan.
Ringkasnya, saiz maksimum kepingan dalam Go ditentukan oleh saiz jenis yang digunakan untuk indeks kepingan. Untuk kepingan dengan jenis elemen bukan bersaiz sifar, saiz maksimum dihadkan oleh memori fizikal yang tersedia, manakala untuk kepingan dengan jenis elemen bersaiz sifar, saiz maksimum dihadkan hanya oleh saiz jenis indeks.
Atas ialah kandungan terperinci Apa yang Menentukan Saiz Maksimum Go Slice?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!