문제

어떤 상황에서 MEMCPY가 Modern Intel/AMD 하드웨어에서 과제를 능가 할 것으로 예상됩니까? 32 비트 인텔 플랫폼에서 GCC 4.2.x를 사용하고 있지만 64 비트에도 관심이 있습니다).

도움이 되었습니까?

해결책

당신은 그것들이 과제를 능가하지 않아야합니다. 그 이유는 컴파일러가 더 빠를 것이라고 생각할 때 어쨌든 memcpy를 사용하기 때문입니다 (플래그 최적화를 사용하는 경우). 그렇지 않고 구조가 합리적이면 레지스터에 맞는 경우, 직접 레지스터 조작을 사용할 수있어 메모리 액세스가 필요하지 않습니다.

GCC에는 내부적으로 레지스터 / 메모리 셀을 직접 변경 해야하는시기 또는 Memcpy 기능을 사용하는시기를 파악하는 특수 블록 이동 패턴이 있습니다. 참고 구조물을 할당 할 때 컴파일러는 컴파일 시간에 이동이 얼마나 큰지 알고 있으므로 예를 들어 작은 사본을 풀 수 있습니다 (루핑 대신 N-Times를 연속으로 이동할 수 있음). 메모 -mno-memcpy:

-mmemcpy
-mno-memcpy
    Force (do not force) the use of "memcpy()" for non-trivial block moves.  
    The default is -mno-memcpy, which allows GCC to inline most constant-sized copies.

컴파일러 자체보다 memcpy를 사용할 때 누가 더 잘 알고 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top