Go Analog for Memset
問題:
問題:Go Go以下的有效方法C 的memset 用非零值初始化數組,就像基本迴圈一樣慢。
答案:
雖然 Go 缺乏明確的 memset 函數,但有模擬其功能的最佳化方法。func memsetLoop(a []int, v int) { for i := range a { a[i] = v } }循環-基於解決方案:
最簡單的替代方案是迭代的循環數組,為每個元素分配所需的值:
func memsetRepeat(a []int, v int) { if len(a) == 0 { return } a[0] = v for bp := 1; bp < len(a); bp *= 2 { copy(a[bp:], a[:bp]) } }基於複製的解決方案:
Go 最佳化的copy() 函數可用來快速初始化陣列。透過手動設定第一個元素並重複複製填充部分,迭代次數減少為log(n):
效能比較:
For對於小數組,基於循環的解決方案稍微快一些。然而,隨著數組大小的增加,基於副本的解決方案由於迭代次數減少而變得明顯更快。Array Size | Loop-Based | Copy-Based |
---|---|---|
100 elements | 1.15x slower | |
1,000 elements | 2.5x slower | |
10,000 elements | 2x slower | |
100,000 elements | 1.5x slower |
以上是Go 的 Memset 等效項:如何有效率地初始化非零值數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!