Apabila mengoptimumkan kod yang menggunakan rentetan map[rentetan] dengan nilai terhad kepada "A" atau "B," seseorang mungkin menganggap bahawa peta[rentetan]bool akan menjadi lebih cekap kerana saiz nilainya yang lebih kecil. Walau bagaimanapun, selepas ujian, ia diperhatikan bahawa penggunaan memori untuk kedua-dua peta kekal tidak berubah. Percanggahan ini memerlukan penerokaan lanjut.
Dalam Go, rentetan tidak disimpan sebagai bait bersebelahan dalam ingatan tetapi sebagai pengepala yang mengandungi penunjuk kepada data sebenar dan panjangnya. Fungsi unsafe.Sizeof(), yang digunakan untuk menentukan saiz pembolehubah, hanya mendapatkan semula saiz pengepala ini, yang kekal malar tanpa mengira panjang rentetan.
Begitu juga , peta Go dilaksanakan sebagai penunjuk, bermakna tidak selamat.Sizeof() melaporkan saiz penunjuk dan bukannya kandungan peta. Oleh itu, penggunaan memori yang dilaporkan bagi kedua-dua map[rentetan]rentetan dan map[rentetan]bool hanya menggambarkan saiz penunjuk masing-masing.
Untuk mengira memori sebenar penggunaan peta, adalah perlu untuk mempertimbangkan saiz struktur data asasnya, termasuk pasangan nilai kunci dan sebarang memori yang diperuntukkan. Untuk rentetan, keperluan ingatannya boleh dianggarkan sebagai jumlah panjang bait dan saiz pengepala. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa walaupun jika rentetan dihiris atau diubah suai, tatasusunan sandaran asas mungkin masih disimpan dalam ingatan.
In Go, yang tidak selamat.Sizeof() fungsi tidak menyediakan perwakilan komprehensif penggunaan memori, terutamanya untuk struktur data seperti peta dan rentetan. Apabila mengoptimumkan penggunaan memori, adalah penting untuk mempertimbangkan keperluan memori sebenar struktur data dan kandungannya.
Atas ialah kandungan terperinci Mengapa `unsafe.Sizeof()` Go Tidak Mencerminkan Penggunaan Memori Sebenar Peta dengan Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!