Rumah >pembangunan bahagian belakang >Golang >Berapa Banyak Memori yang Digunakan oleh Peta Go yang Baru Dicipta?

Berapa Banyak Memori yang Digunakan oleh Peta Go yang Baru Dicipta?

Linda Hamilton
Linda Hamiltonasal
2024-12-06 04:36:19681semak imbas

How Much Memory Does a Newly Created Go Map Consume?

Menganggarkan Memori Terpelihara untuk Peta Go

Apabila bekerja dengan peta Go, selalunya berguna untuk mempunyai anggaran memori yang mereka gunakan. Walaupun dokumentasi menyatakan bahawa peruntukan memori awal adalah bergantung kepada pelaksanaan, berikut ialah menyelam lebih mendalam tentang cara anda boleh menentukan perkara ini:

Memeriksa Kod Sumber Peta

Peta Go dibina berdasarkan dua jenis: hmap (pengepala) dan bmap (tatasusunan baldi). Meneliti kod sumber mendedahkan bahawa apabila tiada ruang awal ditentukan (foo := make(map[string]int)), hanya satu baldi dibuat dalam peta.

Pecahan Pengepala Peta

Pengepala peta itu sendiri mengandungi beberapa medan:

  1. int (saiz bmap tatasusunan)
  2. uint8 (kiraan baldi)
  3. uint16 (kiraan baldi limpahan)
  4. uint32 (ambang minimum sebelum mengembangkan peta)
  5. Dua penunjuk tidak selamat ( untuk elemen dan kekunci penunjuk)
  6. uintptr (tidak digunakan medan)

Dengan mengandaikan seni bina 64-bit, saiz int, uintptr dan tidak selamat. Penunjuk ialah 8 bait setiap satu. Ini memberi kita saiz pengepala:

1 * 8 + 1 * 1 + 1 * 2 + 1 * 4 + 2 * 8 + 1 * 8 = 40 bytes

Struktur Baldi

Setiap baldi dalam peta ialah tatasusunan lapan nilai uint8, yang menambahkan 8 bait tambahan:

8 * 1 = 8 bytes

Jumlah Penggunaan Memori

Menambahkan saiz pengepala dan baldi, kita mendapat jumlah penggunaan memori sebanyak:

40 + 8 = 48 bytes (64-bit architecture)

Anggaran ini boleh digunakan untuk menganggarkan penggunaan memori bagi peta Go yang baru dibuat tanpa ruang awal yang ditentukan.

Atas ialah kandungan terperinci Berapa Banyak Memori yang Digunakan oleh Peta Go yang Baru Dicipta?. 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