Кстати, это не компьютерный факториал.
Если вы действительно пытаетесь узнать, куда уходит время, вы можете попробовать stackshots . Я поместил бесконечный цикл вокруг вашего кода и взял 10 из них. Вот код:
6: void forloop(void){
7: int fac=1;
8: int count=5;
9: int i,k;
10:
11: for (i = 1; i <= count; i++){
12: for(k=1;k<=count;k++){
13: fac = fac * i;
14: }
15: }
16: }
17:
18: int main(int argc, char* argv[])
19: {
20: int i;
21: for (;;){
22: forloop();
23: }
24: return 0;
25: }
А вот стеки, переупорядоченные с самыми частыми наверху:
forloop() line 12
main() line 23
forloop() line 12 + 21 bytes
main() line 23
forloop() line 12 + 21 bytes
main() line 23
forloop() line 12 + 9 bytes
main() line 23
forloop() line 13 + 7 bytes
main() line 23
forloop() line 13 + 3 bytes
main() line 23
forloop() line 6 + 22 bytes
main() line 23
forloop() line 14
main() line 23
forloop() line 7
main() line 23
forloop() line 11 + 9 bytes
main() line 23
Что это говорит вам? В нем говорится, что строка 12 потребляет около 40% времени, а строка 13 - около 20% времени. Также сообщается, что строка 23 потребляет почти 100% времени.
Это означает, что развертывание цикла в строке 12 потенциально может дать вам коэффициент ускорения 100 / (100-40) = 100/60 = 1,67x приблизительно. Конечно, есть и другие способы ускорить этот код, например, исключив внутренний цикл, если вы действительно пытаетесь вычислить факториал.
Я просто указываю на это, потому что это простой способ профилирования.