۲ احمدرضا عرب پور
مقدار اندازه اشغال شده توسط یک اسلایس!
محسن موحد حل شده توسط محسن موحد

سلام و وقت بخیر

چرا وقتی اسلایس از لیست aList گرفته شده سایز آن را 24 نشون میده؟

در حالی که هر عضو از aList هشت بایت هست !

xcbE5XyI8rvpdYvd.png

 

سلام،

در Go، یه اسلایس از سه بخش تشکیل شده: اشاره‌گر به آرایه اصلی، طول (len) و ظرفیت (cap). هرکدوم از این بخش‌ها روی سیستم‌های ۶۴ بیتی ۸ بایت فضا می‌گیرن، پس در مجموع یه اسلایس ۳×۸ = ۲۴ بایت میشه. این اندازه ربطی به سایز داده‌های داخل اسلایس نداره، چون اسلایس خودش داده‌ها رو ذخیره نمی‌کنه، بلکه فقط به آرایه اصلی اشاره می‌کنه. مثلاً:        

package main
import (
	"fmt"
	"unsafe"
)
func main() {
	aList := []int64{1, 2, 3, 4, 5}
	aSlice := aList[1:3]
	fmt.Println("Size of aSlice:", unsafe.Sizeof(aSlice)) // 24 bytes
}

اینجا aSlice فقط یه ساختار ۲۴ بایتیه که به آرایه اصلی aList اشاره می‌کنه. برای همین سایزش همیشه ۲۴ بایته، نه مجموع سایز داده‌هاش!

بهترین پاسخ
محسن موحد ۱۲ آذر ۱۴۰۳، ۲۲:۴۶

سلام و خسته نباشید

تشکر از پاسخ و همراهی شما

احمدرضا عرب پور ۱۷ آذر ۱۴۰۳، ۱۷:۴۷