我需要一个函数来有效地反转 golang 中的切片。(我的具体需要是反转 []byte 的前缀)。
我检查了Effective Go中的示例,objdump -Sd
并生成了很多样板来检查数组索引。甚至交换也太低效了。
我需要一个函数来有效地反转 golang 中的切片。(我的具体需要是反转 []byte 的前缀)。
我检查了Effective Go中的示例,objdump -Sd
并生成了很多样板来检查数组索引。甚至交换也太低效了。
首先,我不得不说:简介第一。这真的是您代码中的瓶颈吗?如果是,您有几个选择。
1) 禁用边界检查。我认为有一个未记录的编译器标志可以进行切片边界检查。不过我暂时找不到。(编辑:-B
根据OP)。
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];
}