문제

이전 스레드를 살펴봤지만 내 질문에 대한 답을 찾을 수 없습니다.

C 프로그램 내에서 함수 본문의 시간을 어떻게 측정할 수 있나요?

도움이 되었습니까?

해결책

간단한 방법은 '시계' 기능을 사용하는 것입니다:

#include <time.h>

clock_t start, end;
double cpu_time_used;

start = clock();
... /* Do whatever you want to time */
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;

또는 Linux를 사용하는 경우 'time' 명령을 사용하여 앱을 실행하는 데 걸리는 시간을 측정할 수 있습니다.하지만 특정 코드 섹션의 시간을 측정할 수는 없으며 프로세스를 시작하는 데 걸리는 시간 등이 포함됩니다.

time ./myapp

편집하다:이것은 매우 기본적인 '빠른 타이머 해킹' 접근 방식입니다.진정한 성능 프로파일링을 위해서는 Larry Watanabe가 제안한 적절한 프로파일러를 살펴보는 것이 좋습니다.

다른 팁

컴파일러와 OS에 따라 다릅니다. Sun Workstations에서는 "Prof"또는 "GPROF"를 사용했습니다. 컴파일러, OS 및 머신을위한 프로파일 링 도구가 있습니다 - Google "C 프로파일 yoursy Compiler"(OS 및 컴파일러의 이름을 대체)

기본 방법은 Clock () 함수를 사용하는 것입니다.

전.:


clock_t start = clock();
/* Your code */
printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);

그러나 운영 체제, 하드웨어, 스케줄러, 멀티 스레딩 등에 대해 배우기 시작하면 실행 시간이 매우 주관적인임을 깨달았습니다. 성능을 측정하려면 (반드시 실행 시간을 의미하지는 않음)보다 강력한 도구가 필요합니다.

GPROF C Profiler를 사용하기가 정말 쉽습니다. 이는 성능 개념을 더 잘 이해하는 데 도움이 될 수 있습니다.

time ./a.out

하나 이상으로 실행하면 출력이 다음과 같습니다.

real    0m0.017s
user    0m0.017s
sys 0m0.000s

real: 프로그램/명령에 의해 취한 총 끝에서 종료 시간

user: 사용자 모드에서 취한 시간.

sys: 커널 모드에서 취한 시간

C의 특정 기능 이름에 대해서는 확실하지 않지만 일반적인 관행은 신체가 시작되기 전에 마이크로 초 타임 스탬프를 저장 한 다음 끝에 다른 것을 잡고 빼는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top