我有一些编码经验,但令我烦恼的最大问题之一是如何改进我的代码.
我每次都检查代码的复杂性,可读性和正确性,但我的问题是我如何测量特定命令的大小和时间.
例如:
当我有下一个问题:
A是整数
B是整数
C是整数
if – A越大,B指定C = A.
否则 – C = B.
对于这个问题,我们有2个简单的解决方案 –
1.使用if-else语句
2.使用三元运算符
为了在编译之前干燥检查文件的大小,我得到的是第二个解决方案文件少于第一个半部分(对于1000000个操作,我得到一些MB的差异).
我的问题是我如何测量一些代码之间的时间差,这些代码执行相同的操作但是使用不同的命令,以及编译器对命令进行优化的程度与示例中的2相近.
解决方法
分析两种算法的时间复杂度.如果他们看起来很有竞
基准.
为您的问题提供足够大的输入,以便时间不受其他-OS-开销的影响.
我有一些方法在Time measurements到时间代码.例:
#include <sys/time.h> #include <time.h> typedef struct timeval wallclock_t; void wallclock_mark(wallclock_t *const tptr) { gettimeofday(tptr,NULL); } double wallclock_since(wallclock_t *const tptr) { struct timeval now; gettimeofday(&now,NULL); return difftime(now.tv_sec,tptr->tv_sec) + ((double)now.tv_usec - (double)tptr->tv_usec) / 1000000.0; } int main(void) { wallclock_t t; double s; wallclock_mark(&t); /* * Solve the problem with Algorithm 1 */ s = wallclock_since(&t); printf("That took %.9f seconds wall clock time.\n",s); return 0; }
您将获得时间测量.然后,您可以使用“算法2”解决问题,并比较这些测量值.