我需要一个函数来有效地反转golang中的切片。 (我的具体需求是反转[]字节的前缀。
我使用objdump -Sd
检查了来自Effective Go的示例,并生成了大量的样板以检查数组索引。即使交换效率太低。
答案 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];
}