zoukankan      html  css  js  c++  java
  • 值复制成本

    值复制成本示例

    package main
    
    import "testing"
    
    type S [12]int64
    var sX = make([]S, 1000)
    var sY = make([]S, 1000)
    var sZ = make([]S, 1000)
    var sumX, sumY, sumZ int64
    
    func Benchmark_Loop(b *testing.B) {
    	for i := 0; i < b.N; i++ {
    		sumX = 0
    		for j := 0; j < len(sX); j++ {
    			sumX += sX[j][0]
    		}
    	}
    }
    
    func Benchmark_Range_OneIterVar(b *testing.B) {
    	for i := 0; i < b.N; i++ {
    		sumY = 0
    		for j := range sY {
    			sumY += sY[j][0]
    		}
    	}
    }
    
    func Benchmark_Range_TwoIterVar(b *testing.B) {
    	for i := 0; i < b.N; i++ {
    		sumZ = 0
    		for _, v := range sZ {
    			sumZ += v[0]
    		}
    	}
    }
    

    Benchmark_Loop 552438 2095 ns/op
    Benchmark_Range_OneIterVar 572258 2123 ns/op
    Benchmark_Range_TwoIterVar 250448 4829 ns/op

    Go中都是值传递,一般注意的点是slice和array。还有range的一些“坑”,如果查看汇编就会发现,range的时候,值会提前clone好,所以如果range的对象过大,需要注意值赋值的成本,可以采用索引代替。

    一个没有高级趣味的人。 email:hushui502@gmail.com
  • 相关阅读:
    UVA11367 Full Tank?
    不均衡样本集问题
    NLP interview
    Linux 指令
    Python 趣题
    Grid Illumination
    动态规划-Minimum Cost to Merge Stones
    Contest 141
    Python join()方法
    Single Number
  • 原文地址:https://www.cnblogs.com/CherryTab/p/14805737.html
Copyright © 2011-2022 走看看