2010-03-23 2 views
4

미리 컴파일 된 헤더를 사용하는 코드가 있습니다. (이전에 다른 사람이 수행 한 것)미리 컴파일 된 헤더 디자인 질문

여기에는 여러 .h 파일이 포함되어 있습니다.

기존의 미리 컴파일 된 헤더에없는 공통 .h 파일을 사용하는 클래스가 있다면 실제 이점이있을 것입니다. 어쩌면 컴파일 속도,하지만 클래스/헤더도 조금 정리 것이라고 생각했다?

미리 컴파일 된 헤더에는 무엇이 있습니까?

답변

3

사전 컴파일 된 헤더에 변경되지 않는 시스템을 넣습니다. 컴파일 속도가 빨라집니다. 미리 컴파일 된 헤더를 변경해야 할 때마다 미리 컴파일 된 헤더 전체를 다시 작성해야하기 때문에 자신의 헤더 파일을 미리 컴파일 된 헤더에 넣지 마십시오.

+0

그래. 그리고 조금이라도 "정리"하지는 않습니다. –

5

다른 소스 파일에서 해당 헤더를 제거하여 "코드 정리"를 위해 미리 컴파일 된 헤더에 포함 된 헤더를 사용하지 마십시오. PCH 사용을 중단하고 싶다면 악몽을 꾼다. 항상 모든 소스 파일에서 종속성을 명시해야합니다. 두 장소에 모두 포함 시키십시오. (적절한 경비원을 배치했다고 가정 할 때) 아무런 해가 없습니다.

여러 소스 파일에 포함 된 헤더 파일은 PCH에 포함시키기에 좋은 후보입니다 (특히 긴 파일 인 경우). 나는 조언을 너무 심각하게 받아들이지 않는다는 것을 안다. 헤더를 넣어 희귀하게이 PCH로 바뀐다. 그러나 이것은 전체 프로젝트 구조에 달려 있습니다. 전체 빌드를 자주 수행하는 경우이 조언을 절대 피하십시오. 증분 재 빌드 작업을 최소화하려면 고려해야 할 사항입니다. 내 경험에 비추어 볼 때, PCH를 재구성하는 것은 상대적으로 빠르며, 일반적으로 (대부분의 경우) 컴파일의 전체적인 속도 향상에 비해이 비용이 훨씬 크다. 모든 PCH 시스템이 PCH 변경 (VC++)에 포함 된 헤더가 재구성 될 필요가 없다는 것을 알기에 충분히 똑똑한 지 확신 할 수는 없지만 명백히 #include 모든 번역 단위에 필요한 모든 것을 제공합니다. 확실히

컴파일러가 컴파일하는 동안 각 파일에 대한 #include 트리를 표시하는 옵션을 지원하는 경우이 (당신의 PCH으로 포함되는 사항에 대한 당신이 의존하지해야하는 또 다른 이유를) 촉진,이 헤더를 식별하기 위해 큰 도움이 될 수 있습니다 그것은 PCH (가장 많이 나오는 것들)에 포함되어야합니다. 최근에 저는 (이미 PCH를 사용하고 있었지만 최적이 아닌) 작업중인 프로젝트에서이 작업을 수행했으며 약 1.5 시간에서 15 분 사이에 C++의 750K 라인 빌드를 가속화했습니다.

0

시스템과 라이브러리 헤더는 프로젝트에 따라 다르지만 PCH는 분명히 다릅니다.

프로젝트의 생성 된 코드는 프로젝트의 다른 부분보다 훨씬 적게 자주 변경됩니다. 이 헤더는 개별 파일에서 처리하는 데 많은 시간이 걸리기 때문에 PCH에 저장됩니다. 파일을 변경하면 비용이 많이 들지만 파일에서 파일을 갖는 것이 더 적은 비용으로 절약되는 것에 비해 비용을 들여야합니다.

관련 문제