【go小記】切片擴容策略

func growslice(et *_type, old slice, cap int) slice {
	newcap := old.cap
	doublecap := newcap + newcap
	if cap > doublecap {
		newcap = cap
	} else {
		if old.len < 1024 {
			newcap = doublecap
		} else {
			for 0 < newcap && newcap < cap {
				newcap += newcap / 4
			}
			if newcap <= 0 {
				newcap = cap
			}
		}
	}

在分配內存空間之前需要先確定新的切片容量,Go 語言根據切片的當前容量選擇不同的策略進行擴容:

  1. 如果期望容量大於當前容量的兩倍就會使用期望容量;
  2. 如果當前切片容量小於 1024 就會將容量翻倍;
  3. 如果當前切片容量大於 1024 就會每次增加 25% 的容量,直到新容量大於期望容量;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章