dongye7231 2010-12-13 12:45
浏览 386
已采纳

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

I need a function to efficiently reverse a slice in golang. (My concrete need is to reverse the prefix of a []byte).

I checked the example from Effective Go with objdump -Sd and a lot of boiler plate is generated to check for array indexes. Even the swap is too inefficient.

  • 写回答

1条回答 默认 最新

  • dousuiben8395 2010-12-13 13:01
    关注

    Firstly, I have to say it: Profile first. Is this really a bottleneck in your code? If it is, you have a few options.

    1) Disable bounds checking. I think there's an undocumented compiler flag that turns of slice bounds checking. I can't find it at the moment though. (EDIT: -B according to OP).

    2) Write the routine in C (or assembler), you can write C for [586]c and link in your go package (you'll need to include some headers from $GOROOT/src/pkg/runtime), like so:

    #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];
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用