>  기사  >  백엔드 개발  >  C의 가상 기능이 성능 병목 현상을 일으키나요?

C의 가상 기능이 성능 병목 현상을 일으키나요?

Patricia Arquette
Patricia Arquette원래의
2024-11-19 08:33:02610검색

Are Virtual Functions in C   a Performance Bottleneck?

C에서 가상 함수의 성능 영향

클래스 디자인에서 가상 함수가 성능에 미치는 영향에 대해 우려를 표명하셨습니다. 이것이 타당한 우려입니까, 아니면 조기 최적화로 간주될 수 있습니까?

귀하의 질문에 답하기 위해 3GHz PowerPC CPU에서 성능 테스트를 실시했습니다. get/set 함수를 사용하여 간단한 4D 벡터 클래스를 만들었습니다. 인라인, 가상 및 일반 함수 호출로 정의된 함수를 사용하여 테스트를 실행했습니다.

결과는 다음과 같습니다.

  • 인라인: 8ms(호출당 0.65ns)
  • 직접: 68ms(호출당 5.53ns)
  • 가상: 160ms (호출당 13ns)

이 경우 L1 캐시에 데이터를 맞추는 경우 가상 함수 호출은 인라인 호출보다 약 20배 느렸습니다. 그러나 이러한 성능 차이의 맥락을 고려하는 것이 중요합니다.

테스트 루프의 각 반복에는 12,288개의 함수 호출이 포함되었습니다. 따라서 가상 루프는 직접 루프보다 92ms 더 오래 걸리고 결과적으로 함수 호출당 추가 오버헤드가 7나노초에 불과합니다.

이러한 결과를 바탕으로 다음과 같은 결론을 내립니다.

  • 실제로 가상 함수는 직접 함수보다 느립니다.
  • 매우 자주 호출하지 않는 한(수백만 단위로) 성능 저하는 무시할 수 있습니다. 초당 횟수).

대부분의 상황에서 최고의 성능을 위해 최적화하지 않는 한 캡슐화 및 유연성을 위해 가상 기능을 사용하는 것과 관련된 장단점이 잠재적인 성능 문제보다 더 큽니다.

위 내용은 C의 가상 기능이 성능 병목 현상을 일으키나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.