Компиляция Small и Large - что быстрее? :)
И так ясно, что Small, но в учебных целях проверим. На примере старенького учебного компилятора Borland C++ 3.1 посмотрим, как выбор модели компиляции может влиять на быстродействие программы. Конечно, для чистоты эксперимента его бы следовало проводить на 8- или 16-разрядном процессоре, но где теперь такой возьмёшь :)
Для этого напишем собственную функцию определения длины строки my_strlen
и сравним её работу
со стандартной strlen
из библиотеки string.h
. Время работы функций будем "засекать" с помощью стандартного метода time
из библиотеки bios.h
:
#include <stdio.h> #include <string.h> #include <bios.h> int my_strlen (char *s) { int len=0; while (*s++) len++; return len; } void main () { long t1,t2; unsigned len; char *s="Hello"; t1=biostime(0,0); for (long int l=0; l<1e7; l++) len=my_strlen(s); t2=biostime(0,0); printf ("\nmy len=%d, my time=%6.2lf",len,(double)(t2-t1)/18.2); t1=biostime(0,0); for (l=0; l<1e7; l++) len=strlen(s); t2=biostime(0,0); printf ("\nhis len=%d, his time=%6.2lf",len,(double)(t2-t1)/18.2); getchar(); }
При модели памяти Small и выключённой опции Automatic far data выполняем 10 000 000 повторений цикла и видим, что наша функция работает быстрее стандартной:
my len=5, my time= 0.33 his len=5, his time= 0.44
Ставим модель памяти Large и собираем проект заново, получается вот что:
my len=5, my time= 0.88 his len=5, his time= 0.49
Оставляем модель Large, но дополнительно включаем опцию компилятора опцию Automatic far data (все указатели автоматически делаются "длинными"):
my len=5, my time= 0.88 his len=5, his time= 0.44
То есть, ничего не изменилось. Следует понимать, что доверять этим данным можно с точностью не выше 0.05 сек., так как таймер BIOS, которым мы здесь пользуемся, обновлется 18.2 раза в секунду. Поэтому 0.49 сек. при некоторых запусках может превращаться в 0.44 и наоборот.
Но тенденция очевидна - "прямая" работа с указателями быстрее работает в Small, а вот быстродействие стандартных функций не меняется - они-то работают с "длинными" указателями :)
16.11.2011, 14:58 [10313 просмотров]