programing

memcpy 대 C의 할당

newsource 2023. 10. 17. 20:18

memcpy 대 C의 할당

어떤 상황에서 memcpys가 최신 인텔/AMD 하드웨어에서 할당된 작업을 능가할 것으로 예상해야 합니까?저는 32비트 인텔 플랫폼에서 GCC 4.2.x를 사용하고 있습니다(하지만 64비트에도 관심이 있습니다).

그들이 과제를 능가할 것이라고 기대해서는 절대 안 됩니다.그 이유는 컴파일러가memcpy(최적화 플래그를 사용하는 경우) 어쨌든 더 빠를 것으로 생각될 때.그렇지 않고 구조가 레지스터에 들어갈 정도로 상당히 작다면 메모리 액세스가 전혀 필요 없는 직접 레지스터 조작을 사용할 수 있습니다.

GCC는 내부적으로 레지스터/메모리 셀을 직접 변경할 때 또는 사용할 때를 결정하는 특별한 블록 이동 패턴을 가지고 있습니다.memcpy기능.구조를 할당할 때 컴파일러는 컴파일 시에 이동의 크기를 알고 있으므로 작은 복사본을 롤롤 해제(루프 대신 일렬로 n번 이동)할 수 있습니다.메모-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컴파일러 자체보다?

언급URL : https://stackoverflow.com/questions/324011/memcpy-vs-assignment-in-c