2013-09-05 2 views
4

Просто из любопытства, я хотел знать, почему мои скомпилированные файлы .C (приблизительно 2-5 кб) меньше по размеру, чем мои исполняемые файлы (.exe) (130-200 kb)?Почему файл исполняемого файла (.exe) имеет размер, отличный от скомпилированного файла .C?

+2

Внешние библиотеки, которые не являются общими и такие, и каждая строка в .c-файле превращается в сборку, которая может содержать более одной строки для каждого файла C, а затем она превращается в двоичный файл. Другими словами, ваш текст (например, печать мира привет) создает множество других вещей, которые идут позади. – Magn3s1um

+0

Если вы посмотрите на код, сгенерированный компилятором, и попытайтесь сопоставить соответствующий код C в исходном файле, вы поймете, почему. –

+1

Именно поэтому C называется языком программирования высокого уровня. – devnull

ответ

3

Исходный файл компилятора - это всего лишь сгенерированный код из фактического исходного файла, а не больше. Исполняемый файл был связан с другими объектными файлами и библиотеками, необходимыми для всех внешних функций и переменных, которые вам нужны. Это, конечно, делает исполняемый файл намного больше, поскольку он содержит гораздо больше кода.

2

Может быть много причин:

  • Компилятор может статически зависимые библиотеки, которые по существу копии, что машинный код в результирующий исполняемый
  • Ассамблея часто занимает больше места, что исходный код - один строка кода может быть составлен на нескольких линиях Ассамблеи (перемещение данных в/из регистров и т.д.)
2

от here

Программы DJGPP должны связывать всевозможные драйверы pmode для вещей, которые обычно выполняются через BIOS в rmode. Такие функции, как управление памятью, доступ к диску, доступ к консоли, доступ к аппаратным средствам и т. Д. По сути, DJGPP встраивает мини-ОС в ваш исполняемый файл!

Смежные вопросы