차이

2011-12-20 3 views
0

가정하자 나는 다음과 같은 프로그램을 가지고 : 나는 윈도우 7 32 비트에서 Microsoft 컴파일러 (cl.exe /O1 sample.c)로 컴파일하면차이

#include <stdio.h> 
int main() 
{ 
    printf("This is a sample C program.\n"); 
    return 0; 
} 

그러면 44KB의 실행 파일이 출력됩니다.

CentOS 64 비트 컴퓨터에서 GNU 컴파일러 (gcc sample.c)로 컴파일하면 6KB의 실행 파일이 출력됩니다.

일반적으로이 작은 프로그램의 파일 크기에는 큰 차이가 있습니까? 왜 라인을 인쇄하고 종료 할 때 Windows 44KB가 필요합니까?

+1

예를 들면 다음과 같습니다. http://stackoverflow.com/questions/1495638/whats-in-a-exe-file. –

+0

코드를 printf ("% f", 1.23)로 변경하여 차이를 확인할 수 있습니다. –

답변

2

/MD 스위치를 cl.exe와 함께 사용하면 동적으로 msvcrt (Microsoft C 런타임 라이브러리)에 연결되고 msvcrt.dll을 사용합니다 (그리고 6KB의 비슷한 실행 파일 크기가됩니다). C 라이브러리의 코드는 실행 파일에 정적으로 링크되어 실행 파일의 크기를 늘립니다.

CentOS의 gcc 컴파일러는 기본적으로 C 라이브러리와 동적으로 링크되도록 설정되어 있습니다.

0

위에서 제공된 링크 외에도 this은 gcc를 사용하여 컴파일 할 때 어떤 일이 발생하는지 이해하는 데 도움이됩니다.