In a word, symbols .
The C ++ Standard Library introduces many characters into your program, since most of the library exists mainly in header files.
Recompile your program in release mode and without debugging symbols, and you can easily expect that the program will be much smaller. (Less if you separate the characters.)
As a quick demonstration of this fact, note:
$ 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*
I can’t explain why building Windows with g ++ creates such large executables, but on any other platform, characters are a major factor in driving large file sizes. At the moment I do not have access to the Windows system, so I can not check.
source
share