Я был удивлен, что только для этой действительно простой программы (скомпилированной для x86_64):
Код: Выделить всё
#include
auto main() -> int {
std::println("Hello World");
return 0;
}
оптимизатор не может помочь. Будет ли он скомпилирован с -O0 или -O3, результат будет примерно одинаковым....
При использовании iostream:
Код: Выделить всё
#include
auto main() -> int {
std::cout Я получаю двоичный файл из ~15 строк ассемблера с -O0.
Я нахожу все это действительно запутанным...
Я имею в виду, что иметь более короткий двоичный файл с меньшей оптимизацией кажется немного неуместным....
А когда println генерирует 5000 строк ассемблера, это кажется слишком сложным.
На самом деле мне вообще интересно, можно ли вообще использовать println....
Я знаю, что это похоже на 2 вопроса в одном посте, но все это меня сильно смутило....
Заранее спасибо
РЕДАКТИРОВАТЬ:
Вот ссылка godbolt с GCC 15.2, -O0:
https://godbolt.org/z/r69qd8Mo1
вот ссылка с GCC 15.2, -O3
https://godbolt.org/z/ejzr3ohhK
Вот видно, что по первой ссылке сгенерированная сборка короче, чем по второй.
Подробнее здесь: [url]https://stackoverflow.com/questions/79893456/is-it-normal-that-stdprintln-bloats-my-binary-is-it-normal-that-o0-binary-i[/url]
Мобильная версия