UnityBuild와 pragma once

회사에 들어와서 쓰던 것 중, 성준씨의 도움으로 유니티빌드라는 컴파일 기법을 알게 되었는데...

https://openshortcuts.com/archives/922

이 개념은 헤더파일을 다시 컴파일하는 것을 막아보자가 중심이다. 이 내용을 읽어보며 그럼 #pragma once#ifndef 가드가 있는데 왜 이걸로 컴파일 시간이 줄어든다는 것인가...? 에 대해 생각해보다가 다음과 같은 글을 보게 되었다. https://oojjrs.tistory.com/32 이 글이 내가 궁금했던 것을 정확히 설명해두었다.

한 번만 include 하는 것은 모두 오브젝트 단위에서의 이야기다. 오브젝트가 다르면 제 아무리 이전에 8만줄짜리 파일을 포함하여 컴파일을 이미 진행했다 하더라도 컴파일러는 다시 컴파일을 진행해버린다는 이야기다.

이것이 바로 유니티빌드를 사용할 때 컴파일 속도가 올라가는 이유였던 것.

GCC 최적화 옵션

GCC로 컴파일하던 중 spdlog 라이브러리에서 컴파일시 -O3 옵션을 사용하는 것을 보고 궁금증이 생겨 찾아보았다.

GCC 최적화 옵션에 대해 자세하게 설명되어 있는 페이지.

http://jinynet9.tistory.com/113

* 커널 컴파일 시 최적화 옵션 -O2만 사용하는 이유
커널은 인라인 함수를 많이 사용하고 있다. -O3 최적화는 컴파일러가 판단해서 인라인을 인라인이 빠른 것은 인라인으로, 함수가 빠른 것은 함수로 바꿔버린다. 커널은 최적화된 수행 속도를 위해 의도적으로 인라인 함수를 사용하고 있어서 컴파일러에 의해서 자의적으로 함수로 바뀌는 것을 막기 위해 -O2 옵션을 사용한다.

커널 컴파일은 아니지만 최적화 옵션을 -O2 로 변경했다. 컴파일 옵션을 변경하고 -O3일 때와 파일 크기를 비교해보았는데 거의 차이가 나지 않았다. 앞으로도 -O2로 사용하면 될듯하다.