golang でスライスを効率的に反転する関数が必要です。(私の具体的な必要性は、[] バイトのプレフィックスを逆にすることです)。
私はEffective Goの例をobjdump -Sd
チェックしました.配列インデックスをチェックするために多くのボイラープレートが生成されます. スワップでさえ非効率的です。
golang でスライスを効率的に反転する関数が必要です。(私の具体的な必要性は、[] バイトのプレフィックスを逆にすることです)。
私は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];
}