2014-04-22 1 views
4

약 40 전환 (4 개의 하위 시스템 포함)의 루트 상태 머신이 있습니다. 모두 잘 작동했지만 전환 횟수를 늘리기 시작하면 컴파일 시간이 크게 늘어났습니다 (대형 상태 시스템의 개발은 지옥이되었습니다). 나는 boost :: msm :: back :: favor_compile_time 정책을 사용하고 멀티 라인 번역 단위로 서브 머신을 분할했지만 효과가 없다. 누구나이 문제에 대한 해결 방법이 있습니까? 부스트 - 1.53, 컴파일러 - MSVC 2012 프로세서 - 인텔 i7의부스트 MSM을 사용하여 컴파일 시간을 단축하는 방법


UPD : 가장 좋은 방법은 시간을 줄이기 위해 -

+0

저는 궁금 해서요. 어떤 종류의 컴파일 시간을보고 있습니까? – Rastaban

+0

주 상태 머신과 서브 머신의 모든 번역 단위에 대한 컴파일 시간 량 – asaenko

답변

2

프로젝트에서 부스트 MSM을 제거 "하지만 효과가없는"

생각에 따르면 TU를 통해 분할하면 작업 속도가 빨라지므로 TU를 다시 작성해야 할 필요는 없으며 클린 재구성이 더 빠를 필요는 없습니다.

사실, 각 TU가 헤더에있는 동일한 코드의 99 %를 포함하기 때문에 사실 (비 평행 화 된) 빌드가 더 많은 TU에 대해 더 느릴 것으로 예상됩니다. 미리 컴파일 된 헤더는 다소 완화 될 수 있습니다.

이와 관련하여 관련 헤더 ( 프리 프로세서 #define 초)를 stdafx에 추가하면 도움이 될 수 있습니다.

+0

부스트 msm으로 인해 미리 컴파일 된 헤더가 도움이되지 않습니다. 헤더 (transition_table, 템플릿 동작)에서 변경 사항의 상당 부분이 발생하므로 헤더가있을 때 변경된 미리 컴파일 된 헤더가 완전히 다시 작성됩니다. – asaenko

+0

@asaenko 나는 알고있다. :) 그러나, 그것을 별도의 TU로 나누면 _entails_ 일반 부분을 소스 파일에 숨긴다. 머리글에 단순히 노출하는 경우, TU로 아무것도 분할하지 않았 으면 단순히 여러 개의 TU로 분산 시켜서 컴파일 시간을 늘릴 수 있습니다. 컴파일러에서 [tag : boost-spirit] 무거운 것을 컴파일하는 것이 더 무거울 수 있기 때문에 저를 믿으십시오 : | 어쨌든, 속임수입니다 : 어떤 시점에서 당신은 컴파일러 방화벽 구현 세부 정보를 원할 것입니다 – sehe

관련 문제