比较了AMD64组装两者的
BenchmarkArrayLocal和
BenchmarkSliceLocal(太长,不适合在这个岗位):
阵列版本
a实际上是在每次阵列访问操作中多次从内存加载地址:
LEAQ "".a+1000(SP),BX
从存储器加载一次后,分片版本仅在寄存器上计算:
LEAQ (DX)(SI*1),BX
这不是决定性的,但可能是原因。原因是这两种方法实际上是完全相同的。另一个值得注意的细节是数组版本调用
runtime.duffcopy,这是一个相当长的汇编例程,而切片版本则没有。



