【问题标题】:Efficient way to rotate a slice in golang在golang中旋转切片的有效方法
【发布时间】:2011-05-24 15:46:27
【问题描述】:

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

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

【问题讨论】:

  • 我设法用 -B 禁用了边界检查
  • @Matt 除了人为的例子,我还没有真正遇到过任何速度问题。

标签: go reverse micro-optimization


【解决方案1】:

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

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];
}

【讨论】:

  • 我没有对此进行测试,但i &lt; s.len 应该替换为i &lt; j,否则切片将被交换两次(因此根本不会)。
  • @Christian 我不确定这个问题/答案是否真的相关,但你是对的。固定。
猜你喜欢
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
  • 2011-01-10
  • 2021-08-18
  • 1970-01-01
  • 2023-04-06
相关资源
最近更新 更多