골란에서 슬라이스를 효율적으로 뒤집을 수있는 함수가 필요합니다. (필자의 구체적인 필요는 [] 바이트의 접두어를 뒤집는 것이다.)골란에서 슬라이스를 효율적으로 회전하는 방법
예제를 Effective Go에서 objdump -Sd
으로 확인했으며 많은 보일러 플레이트가 생성되어 배열 인덱스를 확인합니다. 스왑도 비효율적입니다.
골란에서 슬라이스를 효율적으로 뒤집을 수있는 함수가 필요합니다. (필자의 구체적인 필요는 [] 바이트의 접두어를 뒤집는 것이다.)골란에서 슬라이스를 효율적으로 회전하는 방법
예제를 Effective Go에서 objdump -Sd
으로 확인했으며 많은 보일러 플레이트가 생성되어 배열 인덱스를 확인합니다. 스왑도 비효율적입니다.
첫째로, 나는 그것을 말해야한다. 첫째로 프로파일. 이 코드가 실제로 병목 지점입니까? 그렇다면 몇 가지 옵션이 있습니다.
1) 경계 검사를 사용하지 않습니다. 슬라이스 바운드 검사를 변경하는 문서화되지 않은 컴파일러 플래그가 있다고 생각합니다. 나는 그것을 순간에 발견 할 수 없다. (OP에 따라 편집 : -B
).
2) C (또는 어셈블러)에서 루틴을 작성, 당신은 (당신이 $GOROOT/src/pkg/runtime
일부 헤더를 포함해야합니다), 그래서처럼 이동 패키지 [586] C와 링크 C를 쓸 수 있습니다
#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];
}
경계 검사를 -B – Alexandru
@Matt와 함께 사용하지 못하게했습니다. 실제로 속도 문제는 전혀 경험하지 않았지만 인위적인 예는 없습니다. – cthom06