在golang中旋转切片的有效方法

时间:2010-12-13 12:45:12

标签: go reverse micro-optimization

我需要一个函数来有效地反转golang中的切片。 (我的具体需求是反转[]字节的前缀。

我使用objdump -Sd检查了来自Effective Go的示例,并生成了大量的样板以检查数组索引。即使交换效率太低。

1 个答案:

答案 0 :(得分:6)

首先,我必须说:首先是个人资料。这真的是你代码中的瓶颈吗?如果是,您有几个选择。

1)禁用边界检查。我认为有一个未记录的编译器标志,可以转换切片边界检查。我现在找不到它。 (根据OP编辑:-B

2)在C(或汇编程序)中编写例程,你可以为[586] c编写C并在你的go包中链接(你需要包含$GOROOT/src/pkg/runtime中的一些标题),如下所示:

#include "runtime.h"
mypackage·swapslice(Slice s) {
    int i, j;
    //Not a real swap loop
    for (i = 0, j = s.len - 1; i < j; i++, j--)
        //swap s.arr[i] and s.arr[j];
}