문제

응용 프로그램의 파일 크기를 줄이는 데 관심이 있습니다. Visual Studio 2008에서 MVC ++로 구축 된 MFC/C ++ 애플리케이션입니다. UPX는 최종 EXE를 원래 크기의 약 40%로 줄이는 데 도움이되지만 더 많이 줄이고 싶습니다.

MFC는이 프로젝트에서 정적으로 연결되어야합니다.

이 질문에 요약 된 몇 가지 방법을 시도했습니다. 와이드를 실행 가능한 크기를 줄입니다. 특히 컴파일러/링커에 다른 설정을 적용합니다.

프로젝트에 특정 헤더를 포함시키는 '비용'을 살펴보면 크기를 더 줄일 수 있다고 생각합니다.

이것에 대한 방법에 대한 팁, 아마도 내 코드를 분석 할 수있는 도구 일 수 있습니까? 감사

도움이 되었습니까?

해결책

당신은 아마 이것에서 틀렸을 것입니다. 헤더를 제거하면 빌드 시간이 다소 짧아 질 수 있지만 대부분의 선언은 대부분의 선언 (어쨌든 필요한 경우)이므로 최종 실행 파일의 크기에 거의 영향을 미치지 않아야합니다.

다른 팁

프로젝트의 크기를 줄이는 유일한 방법은 코드 양을 줄이는 것입니다. Neil이 말했듯이 헤더를 제거하면 빌드 시간이 단축됩니다. 컴파일러에는 "네임 스페이스 사용"조항을 수행 할 때 모든 것이 포함되어 있지 않으며 필요한 것만 선택합니다. 반면에, 프로젝트 내에서 전혀 사용하지 않은 물건에 헤더를 추가하는 경우 제거 해야하는 클래스를 잘 나타내는 것이 좋습니다.

귀하의 가정은 분명히 실행 가능한 크기가 어떻게 든 기여 구성 요소, 특정 소스 파일의 합계라는 것입니다. 그런 식으로 작동하지 않습니다.

예를 들어, 코드를 가정하십시오 std::list<T>::size. 많은 번역 단위에서 사용될 수 있습니다. 그러나 링커는 많은 사본을 함께 접, 때로는 다른 유형 T에 대해서도 함께 접을 것이다. 그러나 엑시전에서 바이트를 어떻게 설명하겠습니까?

이제 간단한 (세트) 함수의 바이트를 설명하는 방법조차 할 수 없다면 어떻게 더 복잡한 구성을 설명 할 수 있습니까? 실행 파일에 사용 된 바이트를 고유 소스 파일에 할당 할 수 없다면 개별 기여를 결정할 수 없습니다.

헤더는 일반적으로 다음에만 포함됩니다.

  1. 매크로
  2. 유형 정의 (클래스와 같은)
  3. 함수 전달 선언 (함수 정의는 .c / .cpp 파일에 있습니다)

위의 어느 것도 실제로 .c /.cpp 파일의 코드에서 실제로 사용하지 않는 한 기계 코드가 생성되지 않습니다.

이제 위의 모든 부분을 구문 분석해야하지만 (컴파일 시간에 추가) 실제로 사용하지 않는 한 무시됩니다.

기존 답변의 대부분은 헤더에 실행 가능한 크기에 영향을 미치지 않는 선언 만 포함한다고 가정했습니다. 물론 그 가정이 보유된다면 사실이지만 헤더가 실제 코드 (일반적으로 함수 정의)를 포함하는 것이 상당히 일반적이며 코드 크기에 기여합니다.

반면에, 그들은 해당 함수가 실제로 최종 실행 파일에 연결된 경우에만 기여합니다. 그리고 그들은 당신이 전화 그 기능. 따라서 헤더가 실행 파일 크기를 늘리는 데 기여할 수 있지만 어떻게해야합니까? 당신은 당신이 당신의 코드를 제거 할 수 없습니다 사용. 헤더 파일을 제거하는 것은 옵션이 아닙니다. 해당 코드를 다른 곳으로 이동하지 않으면 실행 파일 크기가 증가합니다. 그래도.

따라서 헤더는 차이가 없거나 그 안에있는 코드를 사용하고 제거 할 수 없기 때문에 차이를 만듭니다. 두 경우 모두 헤더를 제거해도 많이 사지 않을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top