在C中添加两个长整型



我很难添加两个长整型,本质上我想要的是使用这两个变量所花费的"总"时间,我一直得到0

struct rusage rusage;
getrusage(RUSAGE_SELF, &rusage); 
printf("TOTAL TIME n");
printf("%ld.%06ld", (rusage.ru_utime.tv_sec, rusage.ru_utime.tv_usec), 
                    (rusage.ru_stime.tv_sec, rusage.ru_stime.tv_usec));

输出一个0。我可以打印出用户时间,系统时间,但是不能添加它们。请帮助。

作者想要的不是仅仅增加两个long整数,而是分别增加两个timeval结构的秒和微秒。

就像这样,但这可以写得更好:

  struct rusage rusage;
  struct rusage tusage;
  getrusage(RUSAGE_SELF, &rusage); 
  printf("TOTAL TIME n");
  tusage.ru_utime.tv_sec = rusage.ru_utime.tv_sec + rusage.ru_stime.tv_sec;
  tusage.ru_utime.tv_usec = rusage.ru_utime.tv_usec + rusage.ru_stime.tv_usec;
  tusage.ru_utime.tv_sec += tusage.ru_utime.tv_usec / 1000000;
  tusage.ru_utime.tv_usec = tusage.ru_utime.tv_usec % 1000000;
  printf("%ld.%06ldn", tusage.ru_utime.tv_sec, tusage.ru_utime.tv_usec);

您的代码既没有显示结构也没有显示如何填充。但是printf参数列表将两次tv_usec成员传递给函数。您使用逗号操作符,并使用括号中最右边的成员(tv_usec)。

你可以这样做:

#include <sys/time.h>
struct timeval  StartTime, EndTime;
gettimeofday(&StartTime, NULL);
/...
// Your program
.../
gettimeofday(&EndTime, NULL);
printf ("Total time = %f secondsn",
         (double) (tv2.tv_usec - tv1.tv_usec)/1000000 +
         (double) (tv2.tv_sec - tv1.tv_sec));

也许我没有明白你的意思,请试试下面的内容:

#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <stdlib.h>
int main(){
int i=0;
struct rusage rusage;
for(i=0;i<10000000;i++)
{
        free(malloc(4096));
}
getrusage(RUSAGE_SELF, &rusage);
printf("TOTAL TIME n");
printf("%ld.%06ldn",rusage.ru_utime.tv_sec, rusage.ru_utime.tv_usec);
printf("%ld.%06ldn",rusage.ru_stime.tv_sec, rusage.ru_stime.tv_usec);
printf("%ld.%06ldn",rusage.ru_stime.tv_sec+rusage.ru_utime.tv_sec, rusage.ru_stime.tv_usec+rusage.ru_utime.tv_usec);
}

我也不明白你的意思。也许是

double total_time = (rusage.ru_utime.tv_sec + rusage.ru_stime.tv_sec) / 1000.0
  + (rusage.ru_utime.tv_usec + rusage.ru_stime_tv_usec) * 1000

total_time的单位是ms。

最新更新