1

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

我检查了Effective Go中的示例,objdump -Sd并生成了很多样板来检查数组索引。甚至交换也太低效了。

4

1 回答 1

6

首先,我不得不说:简介第一。这真的是您代码中的瓶颈吗?如果是,您有几个选择。

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];
}
于 2010-12-13T13:01:35.167 回答