Одним словом, символы .
Стандартная библиотека C ++ вводит в вашу программу lot символов, так как большая часть библиотеки существует в основном в заголовкефайлы.
Перекомпилируйте вашу программу в режиме выпуска и без символов отладки, и вы можете легко ожидать, что программа будет значительно меньше.(Еще меньше, если вы удалите символы.)
В качестве быстрой демонстрации этого факта обратите внимание:
$ cat hello.c
#include <stdio.h>
int main() {
printf("%s\n", "Hello, world!");
return 0;
}
$ cat hello.cpp
#include <iostream>
int main() {
std::cout << "Hello, world!\n";
return 0;
}
$ gcc hello.c -o hello-c
$ g++ hello.cpp -o hello-cpp
$ gcc hello.c -ggdb -o hello-c-debug
$ g++ hello.cpp -ggdb -o hello-cpp-debug
$ gcc hello.c -s -o hello-c-stripped
$ g++ hello.cpp -s -o hello-cpp-stripped
$ gcc hello.c -s -O3 -o hello-c-stripped-opt
$ g++ hello.cpp -s -O3 -o hello-cpp-stripped-opt
$ ls -gG hello*
-rwxr-xr-x 1 6483 Nov 14 15:39 hello-c*
-rw-r--r-- 1 79 Nov 14 15:38 hello.c
-rwxr-xr-x 1 7859 Nov 14 15:40 hello-c-debug*
-rwxr-xr-x 1 7690 Nov 14 15:39 hello-cpp*
-rw-r--r-- 1 79 Nov 14 15:38 hello.cpp
-rwxr-xr-x 1 19730 Nov 14 15:40 hello-cpp-debug*
-rwxr-xr-x 1 5000 Nov 14 15:45 hello-cpp-stripped*
-rwxr-xr-x 1 4960 Nov 14 15:41 hello-cpp-stripped-opt*
-rwxr-xr-x 1 4216 Nov 14 15:45 hello-c-stripped*
-rwxr-xr-x 1 4224 Nov 14 15:41 hello-c-stripped-opt*
Я не могу объяснить, почему сборка Windows программ с G ++ производит такиебольшие исполняемые файлы, но на любой другой платформе символы являются основным движущим фактором при больших размерах файлов.В настоящее время у меня нет доступа к системе Windows, поэтому я не могу проверить.