golang slice效能分析

2021-08-14 21:53:37 字數 513 閱讀 4536

golang在gc這塊的做得比較弱,頻繁地申請和釋放記憶體會消耗很多的資源。另外slice使用陣列實現,有乙個容量和長度的問題,當slice的容量用完再繼續新增元素時需要擴容,而這個擴容會把申請新的空間,把老的內容複製到新的空間,這是乙個非常耗時的操作。有兩種方式可以減少這個問題帶來的效能開銷:

在slice初始化的時候設定capacity(但更多的時候我們可能並不知道capacity的大小)

復用slice

下面就針對這兩個優化設計了如下的benchmark,**在:

主要結論:

1. 在已知 capacity 的情況下,直接設定 capacity 減少記憶體的重新分配,有效提高效能

2. capacity < length,capacity越接近length,效能越好

3. capacity > lenght,如果太大,反而會造成效能下降,這裡當capacity > 10 * length時,與不設定capacity的效能差不太多

4. 多次使用復用同一塊記憶體能有效提高效能

golang slice 與list 的效能分析。

一 比較slice 與 list 遍歷建立和新增元素速度。package main import time fmt container list func main fmt.println slice 建立速度 time.now sub t string t time.now l list.new ...

golang Slice相關知識

slice 又稱動態陣列,依託陣列實現,可以方便的進行擴容 傳遞等,實際使用中比陣列更靈活。slice依託陣列實現,底層陣列對使用者遮蔽,在底層陣列容量不足時可以實現自動重分配並生成新的slice。接下來按照實際使用場景分別介紹其實現機制。宣告和初始化變數切片主要有以下幾種 內建函式len 和cap...

Golang slice 的底層實現

首先我們來看段 的輸出 s make int,4 for i 0 i 4 i s0 s 0 fmt.println s 輸出的結果是 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 帶著這些疑問,我們來看看slice的底層實現。slice的結構 type slice structar...