Разница между компилятором Microsoft и компилятором GNU с точки зрения размера выходного исполняемого файла - PullRequest
0 голосов
/ 20 декабря 2011

Предположим, у меня есть следующая программа:

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

Если я скомпилирую его с помощью компилятора Microsoft (cl.exe /O1 sample.c) на 32-разрядной машине Windows 7, он выдаст исполняемый файл размером 44 КБ.

Если я скомпилирую его с помощью компилятора GNU (gcc sample.c) на 64-разрядной машине CentOS, он выдаст исполняемый файл размером 6 КБ.

Вообще говоря, почему такая маленькая разница в размерах файлов? Почему Windows 44 КБ просто печатает строку и завершает работу?

Ответы [ 2 ]

2 голосов
/ 20 декабря 2011

Если вы используете ключ / MD с cl.exe, он будет динамически связываться с msvcrt (библиотека времени выполнения Microsoft C) и использовать msvcrt.dll (и вы получите сопоставимый размер исполняемого файла 6 КБ), в противном случае кодиз библиотеки C статически связан с вашим исполняемым файлом, увеличивая размер исполняемого файла.

Ваш компилятор gcc в CentOS по умолчанию настроен на динамическое связывание с библиотекой C.

0 голосов
/ 20 декабря 2011

Помимо ссылок, приведенных выше, я чувствую, , это также поможет вам понять, что происходит, когда мы компилируем с использованием gcc!

...