C/C++ 执行时间的显示问题,为什么一步步调试的时候可以显示正确的执行时间,直接运行时就显示为0

//time_test.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include<stdio.h>#include<time.h>#i... // time_test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define N 10

void generate_array(int a[],int size)
{
for(int i=0;i<N;i++)
{
a[i]=rand()%10;
}

}

int main()
{
int a[N];
int sum=0;
generate_array(a,N);
clock_t time_start=clock();
clock_t time_end;
for(int i=0;i<N;i++)
sum+=a[i]*a[i];
time_end=clock();
printf("Time:%d\n",time_end-time_start);
return 0;
}
一步步调试

直接执行
展开
 我来答
狗食道人
2015-03-07 · TA获得超过304个赞
知道小有建树答主
回答量:166
采纳率:75%
帮助的人:53.8万
展开全部

估计你说反了, 你调试的是错误的时间,,直接运行时是正确的时间.

你调试的时候中断了所有时间才辣么长

正常运行那点计算量, 当然不耗时间


你试着用更长的运算量试试, 比如N改为一百万

比如

long long num = 很大的一个数;

while(0!= num)

{

    简单的一些操作;


    --num;

}



戚文柏Ro
2015-03-07 · TA获得超过336个赞
知道小有建树答主
回答量:400
采纳率:100%
帮助的人:402万
展开全部
截取开始时间与结束时间操作间隔太短(CPU处理的速度非常快,所以时间差值几乎为0),你可以在中间加个Sleep(100)就知道了,Sleep函数在windwos.h头文件中.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友063153b
2015-03-07 · TA获得超过926个赞
知道小有建树答主
回答量:401
采纳率:100%
帮助的人:174万
展开全部
因为时间间隔太短,你这种方法是记不到的,你把N调到很大试试看,或者换种方法调高记录精度
追问
不是这个原因,我调过1000000都不行,我调成10是因为为了一步步的调试,for循环的时候执行的少,而且你10的时候可以看到time_start与time_end值是有差值的,clock()记录的时间单位是ms.
追答

你这N太大时,a数组开不了啊,建议这种数组放到函数外面开全局,给你把函数去掉了简单化,你试试这个

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

#define N 10000000
//int a[N];
//void generate_array(int a[],int size)
//{
// for(int i=0;i<N;i++)
// {
// a[i]=rand()%10;
// }
//}


int main()
{
int sum=0;
//generate_array(a,N);
clock_t  time_start=clock();
clock_t  time_end;
for(int i=0;i<N;i++)
sum++;
time_end=clock();
cout<<time_end - time_start<<endl;
return 0;
}

 


刚刚又试了下,不动你的函数,我把循环控制和函数大小分开,我本地试是可以的

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

#define N 10
#define LEN 10000000
void generate_array(int a[],int size)
{
for(int i=0;i<N;i++)
{
a[i]=rand()%10;
}
}


int main()
{
int a[N];
int sum=0;
generate_array(a,N);
clock_t  time_start=clock();
clock_t  time_end;
for(int i=0;i<LEN;i++)
sum+=(a[i%N]*a[i%N])%N;
time_end=clock();
cout<<time_end - time_start<<endl;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
最爱吹吹风
2015-03-07 · TA获得超过102个赞
知道小有建树答主
回答量:153
采纳率:0%
帮助的人:116万
展开全部
运行太快了,加入一些耗时的操作应该就有了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式