적어도 VS에서는 함수 정의를 무리해 헤더에 쓰지 않게 할 필요는 없을 것 같다

2233 단어 C++C++11C++14

처음에



함수 정의를 cpp/cc 파일에 쓰는지, h/hpp에 쓰는지 가끔 고민하는 일이 있다고 생각합니다만, 컴파일 속도적으로는 어떻습니까, 라고 하는 것으로 검증했습니다.

조사 대상



정의를 헤더에 쓰고 있던 것
https://魏tub. 작은 m / YSR 티켓 / 칸코 ぇ 심과 r_회 / 코 미 t / 7 아 37 아 02343c224018c3962 아 04 있음 d0c77894C4

정의를 cpp 파일로 옮긴 것
https://魏tub. 작은 m / YSR 티켓 / 칸코 ぇ 심과 r_회 / 코 미 t / 아 14223991c37 A1 그림

사용하는 컴파일러


  • Visual Studio 2015 커뮤니티 업데이트 1
  • Visual Studio 2015 community Update 1 Clang with Microsoft CodeGen (January 2016) (clang3.7)

  • 이 두 컴파일러 ✕ x86/x64 ✕ Debug(-O0)/Release(-O2)
    의 총 8가지 구성을 만들어 VS의 배치 빌드 기능으로 모두 재빌드한 시간을 측정

    측정 환경



    측정 방법



    아마레코 TV을 사용하여 컴파일 할 때 로그 창을 녹화합니다. 녹화 코덱은 UtVideo Codec Suite 15.3.0 YUV420 BT.709 VCM

    이것을 AviUtl에서 캡처 컷 편집, AviUtl에 표시되는 총 시간과 총 frame수를 기록한다. AviUtl의 읽기 플러그인에는 L-SMASH Works File Reader r785를 사용했습니다.

    결과



    헤더에 정의를 쓴 것 3:58.59[7158frame]

    cpp에 정의를 쓴 것 3.57.80[7134frame]


    유의한 차이는 나오지 않았다 (헤더에 쓰면 +0.3% 컴파일 시간 증가했다)

    결론



    컴파일러는 충분히 우수하기 때문에 어느 쪽이라도 좋지 않을까.
    template가 얽힌 함수를 공개하면(자) 어차피 헤더에 쓸 밖에 없기 때문에 , 헤더에 정의를 쓰는 것에의 죄악감을 만약 가지고 있는 사람이 있으면 조금은 줄었을까?

    다른 컴파일러에서도 (gcc라든지 gcc라든지 gcc라든지) 아마 같은 것은 아닐까.

    좋은 웹페이지 즐겨찾기