C++ 3d.Комментарии




Виртуальные функции - часть 3


void f1(B* ptr) { ptr->ackf(3, 5); // 42438 вызовов! }

void f2(B* ptr) { ptr->vackf(3, 5); // 42438 вызовов! }

int B::ackf(int x, int y) { if (x==0) return y+1; else if (y==0) return ackf(x-1, 1); else return ackf(x-1, ackf(x, y-1)); }

int B::vackf(int x, int y) { return 0; }

int D::vackf(int x, int y) { if (x==0) return y+1; else if (y==0) return vackf(x-1, 1); else return vackf(x-1, vackf(x, y-1)); }

long Count;

int main(int argc,char** argv) { if (argc>1) Count=atol(argv[1]);

clock_t c1,c2;

D d; { c1=clock();

for (long i=0; i<Count; i++) for (long j=0; j<1000; j++) f1(&d);

c2=clock(); printf("f1(): %ld ths calls per %.1f sec\n", Count, double(c2-c1)/CLK_TCK); } { c1=clock();

for (long i=0; i<Count; i++) for (long j=0; j<1000; j++) f2(&d);

c2=clock(); printf("f2(): %ld ths calls per %.1f sec\n", Count, double(c2-c1)/CLK_TCK); } }

показывает заметно другие результаты, существенно уменьшая относительную разность времени выполнения.




Содержание  Назад  Вперед