GCC 9.2.0 лучше чем 10.3.0?
Рассмотрим простую программу argc.c которая выводит количество аргументов
#include <stdio.h>
int main(int argc,char* argv[])
{
printf("%d\n",argc);
return 0;
}
С помощью gcc версии 9.0.2 переведем текст в ассемблер
gcc -Ofast -S argc.c -o argc.s
.data
LC0:
.ascii "%d\12\0"
.text
.globl _main
_main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl 8(%ebp), %eax
movl $LC0, (%esp)
movl %eax, 4(%esp)
call _printf
xorl %eax, %eax
leave
ret
Если взять gcc версии 10.3.0 то текст на ассемблере выглядит так
.data
LC0:
.ascii "%d\12\0"
.text
_printf:
pushl %ebx
subl $24, %esp
leal 36(%esp), %ebx
movl $1, (%esp)
call *__imp____acrt_iob_func
movl %ebx, 8(%esp)
movl $LC0, 4(%esp)
movl %eax, (%esp)
call ___mingw_vfprintf
addl $24, %esp
popl %ebx
ret
.globl _main
_main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl 8(%ebp), %eax
movl $LC0, (%esp)
movl %eax, 4(%esp)
call _printf
xorl %eax, %eax
leave
ret
Заметно что при вызове printf программа делает переход на метку printf: и выполняет подготовительные работы.Отображением на экране теперь занимается функция vfprintf. Чем обусловлено такое не оптимизированное поведение компилятора? Чем плоха функция printf в версии 10.3.0 ?
Ответы (2 шт):
Автор решения: eri
→ Ссылка
Похоже printf заменили на инлайн и компилятор полностью перенес её в ассемблер.
Автор решения: Space Researcher
→ Ссылка
Давайте по порядку:\
- Что значит лучше?
- eri правильно указал, printf заменили на инлайн, скорее всего это действительно так(по крайней мере звучит логично)
- укажите параметр
Oцифрой, как написано в доке, сравните на разных уровнях оптимизации. Вполне вероятно, что с этим тоже может быть связано. - Даже если вы проверили все вышеперечисленные пункты и 10 версия работает так же, то это вообще не значит что она хуже, а 9 лучше. Но и обратного тоже не значит. Это просто значит, что он работает по другому. То, что в ассемблерном коде больше команд, ни о чём не говорит, даже с точки зрения скорости выполнения(а я так понял, вы обращаете внимание именно на это).
- Данная особенность вообще никак не повлияет на скорость работы программы на современных машинах