구조 할당 또는 memcpy?
(C의) 다른 구조로 복제하는 경우, 의 프로&콘은 무엇입니까?
struct1 = struct2;
대
memcpy(&struct1, &struct2, sizeof(mystruct_t));
동등합니까?퍼포먼스나 메모리 사용량에 차이가 있습니까?
그struct1=struct2;
표기법은 더 간결할 뿐만 아니라 더 짧고 컴파일러에게 더 많은 최적화 기회를 줍니다.의 의미=
과제인데 반해memcpy
메모리를 카피합니다.가독성에서도 큰 차이가 납니다만,memcpy
이 경우에도 마찬가지입니다.
사용하다=
.
같은 토픽에 관한 이 대화를 확인해 주세요.http://bytes.com/topic/c/answers/670947-struct-assignment
기본적으로 구조 복사가 수행하는 작업에 대해 이 스레드의 코너 케이스에 대해 많은 의견 차이가 있습니다.구조의 모든 구성원이 단순한 값(int, double 등)인지 여부는 매우 명확합니다.어레이와 포인터, 그리고 바이트 패딩으로 인해 혼란이 발생합니다.
모든 것이 매우 명확해야 합니다.memcpy
이는 모든 바이트의 문자 그대로 복사이기 때문입니다.여기에는 절대 메모리 포인터, 상대 오프셋 등이 모두 포함됩니다.
성능 차이는 잘 모르겠지만 대부분의 컴파일러는 memcpy를 후드 아래에서 사용합니다.
저는 대부분의 경우 과제를 선호합니다. 읽기 쉽고 목적이 무엇인지에 대해 훨씬 더 명확합니다.두 구조 중 하나의 유형을 변경했다고 가정해 보십시오. 컴파일러는 컴파일러 오류를 발생시키거나 operator=(있는 경우)를 사용하여 필요한 변경 사항을 안내합니다.반면 두 번째는 미묘한 버그를 일으킬 수 있는 맹목적으로 복사를 하는 반면,
둘 중 하나가 다른 하나보다 성능이 더 우수할 수 있는 본질적인 이유는 없습니다.컴파일러와 그 버전에 따라 다를 수 있습니다.따라서 정말로 관심이 있는 경우에는 프로파일링과 벤치마크를 실시하여 사실을 판단의 근거로 삼습니다.
직설적인 과제는 읽기 더 쉽다.
과제는 틀리기에는 조금 더 위험하기 때문에 가리키는 구조가 아닌 구조에 포인터를 할당할 수 있습니다.이걸 두려워한다면, 네 팀 테스트에서 확실히 다뤄야 해이런 위험은 신경 안 써memcpy
구조 크기를 잘못 알 수 있기 때문에 위험합니다.)
언급URL : https://stackoverflow.com/questions/5383318/struct-assignment-or-memcpy
'source' 카테고리의 다른 글
C의 암묵적 함수 선언 (0) | 2022.07.23 |
---|---|
Vuetify 필드에 비밀번호 문자 숨기기 (0) | 2022.07.23 |
컴파일러에서 8비트로 표시되는 부울 값.운영이 비효율적인가요? (0) | 2022.07.23 |
Java Key Store에 PEM Import (0) | 2022.07.23 |
VueJ - 빌드 후 여러 js 파일이 dist에 있음 (0) | 2022.07.23 |