计算程序运行时间

测试编译器对于指针迭代和下标迭代是否生成相同的代码。

#include <iostream>
#include <time.h> // For clock()
#include <stddef.h> // For size_t
#include <string.h> // For memcpy()
 

void copy_with_pointers(char const *src, char *dst,
                        size_t n) {
   for (size_t k = 0; k!=n; ++k)
      *dst++ = *src++;
}

void copy_with_indices(char const *src, char *dst,
                       size_t n) {
   for (size_t k = 0; k!=n; ++k)
      dst[k] = src[k];
}

int main() {
   int const n_bytes = 100000;
   int const n_calls = 100;
   char *src = new char[n_bytes];
   char *dst = new char[n_bytes];

   // Reduce paging effects by accessing all bytes:
   memcpy(dst, src, n_bytes);
   clock_t start, end, reftime; // transform %s to div CLOCKS_PER_SEC 

   // Test 1 (reference time)
   start = clock();// 
   for (int k = 0; k!=n_calls; ++k)
      memcpy(dst, src, n_bytes);
   end = clock();
   reftime = end-start;
   std::cout << end - start << std::endl;

   // Test 2 (pointers)
   start = clock();
   for (int k = 0; k!=n_calls; ++k)
      copy_with_pointers(src, dst, n_bytes);
   end = clock();
   std::cout << end - start << std::endl;
   std::cout << "With pointers: "
        << static_cast<double>(end-start)/reftime
        << " times slower than memcpy.\n";

   // Test 3 (indices)
   start = clock();
   for (int k = 0; k!=n_calls; ++k)
      copy_with_indices(src, dst, n_bytes);
   end = clock();
   std::cout << end - start << std::endl;
   std::cout << "With indices: "
        << static_cast<double>(end-start)/reftime
        << " times slower than memcpy.\n";

   delete[] src;
   delete[] dst;
   return 0;
}


代码详解:

clock_t  start, end;

start = clock();

/*  code     */

end  = clcok();

times = end - start;  //单位是clock_t(CPU时钟数) ,转换为秒 需要除以CLOCKS_PER_SEC

你可能感兴趣的:(C++,运行时间,clock_t)