
C++: Как мы докатились до Hello World в 2 МБ
Vlad441 7 часов назад C++: Как мы докатились до Hello World в 2 МБ Средний 4 мин 6.1K C++ * Компиляторы * Программирование * Системное программирование * Ненормальное программирование * Туториал Из песочницы Что не так...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. Vlad441 7 часов назад C++: Как мы докатились до Hello World в 2 МБ Средний 4 мин 6. 1K C++ * Компиляторы * Программирование * Системное программирование * Ненормальное программирование * Туториал Из песочницы Что не так с Hello World? Казалось бы, современный С++ дает столько возможностей… Давайте попробуем начать постигать всю эту необъятную мощь с написания Hello World:#include int main(){ std::cout << "Hello World" << std::endl; }Какой там сейчас последний компилятор… Давайте возьмем какой-нибудь GCC 15.
0, запускаем компиляцию g++ -static -O2 hello. exe и… получили 2,30 МБ. Почему для отображения 11 символов понадобилось раздуть бинарник до >2МБ?
Технические детали
Что же может влиять на размер бинарника? Первым на ум приходят флаги компилятора, давайте попробуем поочередно добавлять флаги:-s - (-~1,25 МБ) -> Размер: 1,05 МБПояснение: Флаг -s удаляет отладочную информацию из исполняемого файла. Иные флаги оптимизаций не влияют на размер при текущей кодовой базе.
Интересно выходит, что для обычной компиляции даже Hello World компилятор почему-то пихает по умолчанию информацию, которая не нужна для вывода 11 символов. А что там у нас в кодовой базе? #include ага, iostream.
Хм, а что если заменить на printf? #include int main(){ printf("Hello World }И получаем… 42,5 КБ — уменьшение еще на ~1 МБ. Что же в этом iostream такого, что он просит 1 метр вашего бинарника?
Отраслевые последствия
А по факту он тянет за собой инициализацию целой цепочки зависимостей, начиная с глобального std::cout -> std::stringstream и заканчивая локалями, виртуальными функциями и шаблонами, и всё это ради 11 символов. Для стандартной библиотеки языка, который строится вокруг эффективности как-то избыточно выходит. Может конкретная версия компилятора виновата?
Что ж, попробуем собрать на разных версиях GCC:15. 2: 260 КБТенденция явно показывает, что чем выше версия компилятора, тем жирнее зависимости которые тянет iostream. Если также пройтись по версиям уже для printf?
2: 5,50 КБЛюбопытно что тут версия 10. 0 - выбивается из тенденции. Возможно есть отличия в портах между TDM и MinGW-W64.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





