[英]C - measuring computing time
有沒有簡單的方法來測量C中的計算時間? 我在執行時嘗試了時間實用程序,但我需要測量程序的特定部分。
謝謝
您可以使用<time.h>
的clock
函數和宏CLOCKS_PER_SEC
:
clock_t start = clock() ;
do_some_work() ;
clock_t end = clock() ;
double elapsed_time = (end-start)/(double)CLOCKS_PER_SEC ;
現在elapsed_time
保持調用do_some_work
花費的時間,以小數秒為單位。
您可以嘗試使用探查器“gprof”。 更多信息請訪問: http : //www.cs.utah.edu/dept/old/texinfo/as/gprof.html
通常可以使用clock()
函數來獲取對正在測試的函數的單個調用的開始和結束時間。 但是,如果do_some_work()
特別快,則需要將其置於循環中並將循環的成本本身考慮在內,例如:
#define COUNT 10000
// Get cost of naked loop.
clock_t start_base = clock();
for (int i = count; i > 0; i--)
;
clock_t end_base = clock();
// Get cost of loop plus work.
clock_t start = clock();
for (int i = count; i > 0; i--)
do_some_work() ;
clock_t end = clock();
// Calculate cost of single call.
double elapsed_time = end - start - (end_base - start_base);
elapsed_time = elapsed_time / CLOCKS_PER_SEC / COUNT;
這至少有兩個好處:
clock()
函數具有有限分辨率的情況下,您將獲得更准確的答案。 @codebolt - 謝謝! 非常好。 在Mac OS X上,我添加了time.h的include,並粘貼在你的四行中。 然后我打印了start,stop(整數)和經過時間的值。 1mS分辨率。
output:
3 X: strcpy .name, .numDocks: start 0x5dc end 0x5e1 elapsed: 0.000005
calloc: start 0x622 end 0x630 elapsed: 0.000014
在我的foo.c程序中我有
#include <libc.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
但它沒有明確包括time.h. 其中一個人必須帶來它。
實際代碼:
clock_t start = clock() ;
strcpy( yard2.name, temp ); /* temp is only persistant in main... */
strcpy( yard1.name, "Yard 1");
strcpy( yard3.name, "3 y 3 a 3 r 3 d 3");
yard1.numDocks = MAX_DOCKS; /* or so I guess.. */
yard2.numDocks = MAX_DOCKS; /* or so I guess.. */
yard3.numDocks = MAX_DOCKS; /* or so I guess.. */
clock_t end = clock() ;
double elapsed_time = (end-start)/(double)CLOCKS_PER_SEC ;
printf("3 X: strcpy .name, .numDocks: start 0x%x end 0x%x elapsed: %-12:8f \n", start, end, elapsed_time );
start = clock() ;
arrayD = calloc( yard2.numDocks, sizeof( struct dock ) ); /* get some memory, init it to 0 */
end = clock() ;
elapsed_time = (end-start)/(double)CLOCKS_PER_SEC ;
printf("calloc: start 0x%x end 0x%x elapsed: %-12:8f \n", start, end, elapsed_time );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.