بیشتر بودن مقدار cap از len در زمان append کردن

IMG_20220817_104826_333

https://go.dev/tour/moretypes/15

چرا تو خط آخر cap یکی بیشتر از len شده؟!
یکم تو گوگل خوندم دربارش ولی قانع نشدم

سلام وقت بخیر
در گولنگ ظرفیت یک slice بصورت پویا تعیین میشه. وقتی که از تابع append استفاده می‌کنیم برای اینکه یک عضو جدید به slice اضافه کنیم، برنامه در زمان اجرا چک می‌کنه، آیا فضای حافظه‌ای که به slice مورد نظر اختصاص داده شده، آیا گنجایش پذیرش عضو جدید رو داره یا نه، اگه داشته باشه، خب عضو رو به آخر slice اضافه می‌کنه. اما اگه محل فعلی حافظه که به slice اختصاص داده شده ظرفیت کافی نداره، ابتدا در حافظه یک مکان جدید، با ظرفیت بیشتر از ظرفیت فعلی به slice اختصاص داده می‌شه. برای همین هست که به مرور زمان حین اجرای برنامه مقدار cap تغییر می‌کنه، اینکه هنگام تغییر مکان slice چقدر ظرفیت بیشتر از ظرفیت فعلی اختصاص بده، سیاست‌های مختلفی داره که به مرور زمان تغییر می‌کنه، اما می‌تونید اینجا توضیحاتی رو در این مورد ببینید.

خوندن این مقاله‌ها هم خالی از لطف نیست

3 پسندیده

image

برای اینکه بتونیم بروزترین سیاست‌های runtime گولنگ برای اختصاص فضای جدید به cap رو متوجه بشیم می‌تونیم کد کامپایلر رو برای تابع runtime.growslice بخونیم.
مثلا لینک زیر کد این تابع برای نسخه ۱.۱۹ از کامپایلر رو نشون میده

3 پسندیده