지난주 나는 웹에서 killallcops.exe이라는 간단한 게임을 발견했습니다. 바이너리를 연구하고 그 프로그램이 왜 그렇게 큰지 궁금해했습니다. (약 460K) 컴파일 된 바이너리의 크기는 사용 된 라이브러리에 따라 어떻게 달라 집니까? c/C++
그래서 나는 ++ g로 컴파일#include <iostream>
int main(){
std::cout << "All cops are killed.\nCongratulations";
std::cin.ignore();
return 0;
}
를 iostream 사용하여 게임을 다시 썼다 너무 460K를 얻었다.
난 정말이 일이 이렇게 큰 이유를 궁금해하고 표준 입출력
#include <stdio.h>
int main(){
printf("All cops are killed.\nCongratulations");
while(getchar() != '\n'){}
return 0;
}
는 GCC와 함께 컴파일 13K있어 사용하여 다시 썼다.
iostream은 stdio (typesafety와 같은)보다 훨씬 더 많은 능력을 가지고 있기 때문에 그 자체가 훨씬 크기 때문에 더 큰 바이너리를 생성하고 iostream을 사용할 때 크기를 줄이는 해결책이 있는지, 예를 들어 특정 그 부분들?
편집 : 나는 리눅스에서 재생하지 못하는 Cygwin에서
하나의 추측 : 템플릿. –
컴파일 할 어셈블리를 보여줄 수 있습니까? –
''은 간단한'cout' 호출을 사용하는 경우에도 많은 내부 의존성을 가지고 있습니다. 그것은 (템플릿 코드 등을 포함하는) 많은 코드/헤더를 필요로합니다. 컴파일러/링커가 자신이하는 일을 알 수 있지만 바이너리 크기를 줄이려면 심볼을 제거하는'gcc -s' 나 최적화를 시도하는'-Os'와 같은 옵션을 사용 해보십시오 사이즈의 바이너리 그러나 중요하지 않은 응용 프로그램에서는 ''을 가져 오는 크기가 그다지 중요하지 않습니다. –
birryree