1. 程式人生 > 其它 >Golang 切片slice簡要歸納

Golang 切片slice簡要歸納

  切片的本質是一個連續記憶體的陣列。

  切片由以下三個部分組成:

  成員空間+當前成員數+最大成員數

  當前成員數即為len,最大成員數即capacity(這個屬性和字串末尾的位元組個數類似),使用len的原因是為了防止切片成員發生越界。

  

  切片是長度可變的,因此在成員數增加的過程中會發生擴容,具體的判斷規則如下:

  原有容量為oldCap,現有成員數為cap,新容量為newCap

  1.原有容量翻倍後,是否小於現有成員數,是則直接擴容到現有成員數的容量?————如果oldCap*2 < cap,則newCap = cap

  2.翻倍後大於現有成員數,則判斷舊容量是否小於1024,如果小於則直接翻倍,擴容100%;

   如果大於則1024,則擴容25%

  注意最終所得的實際容量並不一定完全等於newCap,而是大於等於newCap,因為Golang的記憶體管理模組提前向作業系統申請了記憶體塊(如4位元組、16位元組、32位元組大小),最終分配給切片的,將從這些記憶體塊中合理選擇。