유니티 빌드
Unity build소프트웨어 엔지니어링에서 Unity Build(통합 빌드 또는 점보 빌드라고도 함)는 C 및 C++ 소프트웨어 개발에서 사용되는 방법으로, 여러 변환 유닛을 하나의 변환 유닛으로 결합함으로써 프로젝트의 컴파일을 고속화합니다.보통 include 디렉티브를 사용하여 여러 소스 파일을 하나의 큰 파일로 번들함으로써 실현됩니다.
실행
2개의 다른 변환 유닛이 있는 경우file_a.cc
#실패하다 "그럴 수도 있어요.h" // 소스 파일 A의 내용...
그리고.file_b.cc
#실패하다 "그럴 수도 있어요.h" // 소스 파일 B의 내용...
같은 프로젝트에서 둘 다 헤더를 포함한다.header.h
그 헤더는 컴파일러 체인에 의해 각 빌드 태스크에 대해1회씩2회 처리됩니다.2개의 변환 유닛이 1개의 소스 파일로 Marge 되는 경우jumbo_file.cc
#실패하다 "file_a.cc" #실패하다 "file_b.cc"
그리고나서header.h
컴파일 시 (가드 포함)1회만 처리됩니다.jumbo_file.cc
를 클릭합니다.[1]
영향들
유니티 빌드의 주요 장점은 여러 소스 파일에 포함된 헤더의 내용을 해석 및 컴파일할 때 중복되는 작업을 줄일 수 있다는 것입니다.헤더의 내용은 보통 전처리 후 소스 파일에서 코드의 대부분을 차지합니다.유니티 빌드는 컴파일 체인에 의해 작성 및 처리되는 오브젝트 파일의 수를 줄임으로써 다수의 작은 소스 파일이 있기 때문에 발생하는 오버헤드를 경감할 수 있습니다.또, 유니티 빌드 태스크를 구성하는 파일간에 프로시저간 분석과 최적화가 가능하게 됩니다(링크 타임 최적화의 효과와 유사합니다).또, 같은 유니티 빌드의 다른 소스 파일에 심볼이 2회 정의되어 있는 경우, 컴파일러가 정의를 특정해 경고나 에러를 발신할 수 있기 때문에, 1 개의 정의 룰의 위반을 검출하는 것도 용이하게 됩니다.
유니티 빌드의 결점 중 하나는 변환 유닛이 크기 때문에 메모리 용량이 커진다는 것입니다.번역 유닛이 크면 병렬 빌드에 부정적인 영향을 미칠 수 있습니다.대부분의 대규모 컴파일 작업은 일반적으로 이용 가능한 모든 병렬 컴퓨팅 자원을 효율적으로 포화시키는 스케줄링이 어렵거나 불가능하기 때문입니다.또한 유니티 빌드는 가능한 한 코드 재구축에 의존하지 않는 증분 빌드의 이점 중 일부를 부정할 수 있습니다.즉, 마지막 빌드 이후의 변경의 영향을 받는 변환 유닛만 해당됩니다.
유니티 빌드는 프로그램의 의미에도 잠재적으로 위험한 영향을 미칩니다.내부 링크에 의존하는 일부 유효한 C++ 컨스트럭트는 유니티 빌드에서 실패할 수 있습니다.예를 들어 익명 네임스페이스에 정의된 정적 기호 및 기호가 서로 다른 파일에서 동일한 식별자를 사용하여 충돌합니다.다른 C++ 파일이 같은 이름의 다른 함수를 정의하면 컴파일러는 파일을 다른 변환 단위로 사용하여 소프트웨어를 설계할 때 불가능한 잘못된 함수를 선택함으로써 예기치 않게 오버로드를 해결할 수 있습니다.또 다른 악영향은 다른 소스 파일 [2]간에 매크로 정의가 유출될 수 있다는 것입니다.
시스템 지원 구축
Visual Studio,[3] Meson[4] 및 CMake [5]등 일부 빌드 시스템은 자동화된 통합 빌드를 기본적으로 지원합니다.
레퍼런스
- ^ 쿠보타 외(2019년)
- ^ Kirilov, Viktor (7 July 2018). "A guide to unity builds". Archived from the original on 2020-11-12.
- ^ Olga Arkhipova (2 July 2018). "Support for Unity (Jumbo) Files in Visual Studio 2017 15.8 (Experimental)". Microsoft.
- ^ "Unity builds".
- ^ "UNITY_BUILD - CMake 3.17.0 Documentation".
- Kubota, Takafumi; Yusuke, Suzuki; and, Kenji Kono (2019). To unify or not to unify: a case study on unified builds (in WebKit). Proceedings of the 28th International Conference on Compiler Construction.