프로그램 크기 관리하기

UnShit의 이미지

프로그램의 크기를 줄이는 방법에 대해서 공부를 하고 있습니다.

먼저, 아래와 같은 코드를 컴파일 할 경우

int main()
{
    int a = 1234;
    return 0;
}

Visual studio 2008 에서는 프로그램 크기가 25kb 입니다.
리눅스 gcc 에서 컴파일 했을때는 11kb
윈도우 어셈블러 masm32 로 컴파일했을때는 1.5kb 나왔습니다.

visual studio 컴파일러로 만든 프로그램을 strip 하여도 크기가 안 줄었습니다.
리눅스 gcc 는 2.6kb 정도로 줄었습니다.

debug 해보면, vs 로 만든프로그램은 stack 사이즈를 0CCh 만큼 잡고,
size 해보면 code 영역을 엄청나게 많이 쓰고 있습니다.

궁금한 것은, 왜 이렇게 똑같은 프로그램인데 크기가 차이나는 것일까요?

비주얼 스튜디오를 이용하더라도 프로그램 크기를 줄일수 있는 방법은 없나요?

serialx의 이미지

사용하는 C Library 에 따라서 구현체의 크기가 달라질 수 있습니다. 그리고 Dynalic Linking 을 했냐 Static Linking 을 했냐에 따라서 결과는 천차만별입니다. 디버그 심볼에 따른 용량 차이도 있구요. 결국 아무리 조건을 같게 둔다고 해도 같은 용량이 나오기는 힘듭니다..