여러 가지 방법이 있습니다. 그 중 하나는 단순히 함수의 시작과 끝에서 고정밀 타이머 호출을 추가하는 것입니다. 함수 호출 횟수에 따라 시간을 누적 할 수 있습니다 (예 :
typedef type_of_time_source tt;
tt total = 0;
void my_func(....)
{
tt time = gettime();
... lots of your code ...
time = gettime() - time;
total += time;
}
) 또는 개별 간격을 저장할 수 있습니다.
tt array[LARGE_NUMBER];
int index = 0;
... same code as above ...
time = gettime() - time;
if (index >= LARGE_NUMBER) index = 0; // [or LARGE_NUMBER-1?]
array[index++] = time;
SDL에 대한 호출이 함수의 중간에있는 경우 당연히 그 시간이나 다른 할인가가 필요합니다. 그렇지 않은 경우, 나는 확실히 모든 기능을 사용했습니다, 그리고 장기 실행 기능으로 합리적으로 큰
enum {
FUNCA,
FUNCB,
....
MAX_TIMINGS
}
struct timing_val
{
tt start, end;
char *name;
}
struct timing_val timing_values[MAX_TIMINGS];
#define START(f) do { timing_values[f].name = #f; timing_values[f].start = gettime(); } while (0);
#define END(f) do { timing_values[f].end = gettime(); } while(0);
void report()
{
for(int i = 0; i < MAX_TIMING; i++)
{
if (timing_values[i].start == 0 && timing_vlaues[i].end
cout << timing_values[i].name <<< " time = " <<
timing_values[i].end - timing_values[i].start << endl;
}
}
void big_function()
{
START(FUNCA);
funca();
END(FUNCA);
START(FUNCB);
funcb();
END(FUNCB)
...
report();
}
:
또 다른 방법은 여러 가지 기능의 개별 타이밍을 측정하는 것 많은 오버 헤드를 추가합니다.
여러 기능을 동시에 측정 할 수도 있습니다. 우리가 전체 기능을 원한다면 위의 열거 형 목록에 "BIG_FUNC"열거 형을 추가하면됩니다.
void big_function()
{
START(BIG_FUNCTION);
START(FUNCA);
funca();
END(FUNCA);
START(FUNCB);
funcb();
END(FUNCB)
...
END(BIG_FUNCTION);
report();
}
작동중인 OS에 태그를 지정하십시오. –
이미 다른 사람이 작성 했으므로 잘 부탁드립니다. – GigaBass