2010-12-13 4 views
1

골란에서 슬라이스를 효율적으로 뒤집을 수있는 함수가 필요합니다. (필자의 구체적인 필요는 [] 바이트의 접두어를 뒤집는 것이다.)골란에서 슬라이스를 효율적으로 회전하는 방법

예제를 Effective Go에서 objdump -Sd으로 확인했으며 많은 보일러 플레이트가 생성되어 배열 인덱스를 확인합니다. 스왑도 비효율적입니다.

+0

경계 검사를 -B – Alexandru

+3

@Matt와 함께 사용하지 못하게했습니다. 실제로 속도 문제는 전혀 경험하지 않았지만 인위적인 예는 없습니다. – cthom06

답변

6

첫째로, 나는 그것을 말해야한다. 첫째로 프로파일. 이 코드가 실제로 병목 지점입니까? 그렇다면 몇 가지 옵션이 있습니다.

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

나는 이것을 테스트하지 않았지만'i Christian

+0

@Christian 나는이 질문/답변이 더 이상 관련이 없다는 것을 잘 모르겠지만 당신은 옳습니다. 결정된. – cthom06

관련 문제