Компиляция этого кода с помощью -O3
:
#include <iostream>
int main(){std::cout<<"Hello World"<<std::endl;}
выводит файл длиной 25,890
. (Скомпилировано с GCC 4.8.1)
Невозможно ли компилятор сохранить два вызова в write(STDOUT_FILENO, ???, strlen(???));
, сохранить содержимое write
, сохранить строку и записать бумагу на диск? Это должно привести к EXE с длиной в 1,024
байт для моей оценки.
Составление глобальной программы hello в результатах сборки в файле 17
bytes: https://stackoverflow.com/info/284797/hello-world-in-less-than-17-bytes означает, что фактический код имеет длину 5 байтов. (Строка Hello World\0
)
Что этот EXE хранит, кроме фактического main
и функций, которые он вызывает?
ПРИМЕЧАНИЕ. Этот вопрос также относится к MSVC.
Edit:
Многие пользователи указали на iostream
как на виновника, поэтому я протестировал эту гипотезу и скомпилировал эту программу с теми же параметрами:
int main( ) {
}
И получил байты 23,815
, гипотеза была опровергнута.