计算程序运行时间

本文通过编写代码片段,对比编译器使用指针迭代和下标迭代实现字符串复制操作时的性能差异,评估两种方法在不同情况下的执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值