🔥 ۴۰ درصد تخفیف ثبت‌نام دوره‌ها قبل از افزایش قیمت‌ها
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ سلیم نقدی
مقدار اندازه اشغال شده توسط یک اسلایس!
افشیده کهنمویی حل شده توسط افشیده کهنمویی

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

چرا وقتی اسلایس از لیست 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 اشاره می‌کنه. برای همین سایزش همیشه ۲۴ بایته، نه مجموع سایز داده‌هاش!

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

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

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

سلیم نقدی ۱۷ آذر ۱۴۰۳، ۱۷:۴۷