【问题标题】:adding two long ints in C在 C 中添加两个长整数
【发布时间】:2013-03-14 06:44:05
【问题描述】:

我很难添加两个长整数,基本上我想要的是使用这两个变量所花费的“总”时间,我一直得到 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 结构的秒和微秒。

【问题讨论】:

标签: c


【解决方案1】:

类似这样,但这样写得更好:

  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.%06ld\n", tusage.ru_utime.tv_sec, tusage.ru_utime.tv_usec);

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 如果答案解决了您的问题,您可以点击“接受”复选标记。
    【解决方案3】:

    你可以这样做:

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

    【讨论】:

      【解决方案4】:

      也许我不明白,请尝试以下操作:

      #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.%06ld\n",rusage.ru_utime.tv_sec, rusage.ru_utime.tv_usec);
      printf("%ld.%06ld\n",rusage.ru_stime.tv_sec, rusage.ru_stime.tv_usec);
      printf("%ld.%06ld\n",rusage.ru_stime.tv_sec+rusage.ru_utime.tv_sec, rusage.ru_stime.tv_usec+rusage.ru_utime.tv_usec);
      }
      

      【讨论】:

      • 在我的测试中有以下结果:lcchen@lcchen-desktop:~$ ./a.out TOTAL TIME 0.484030 0.020001 0.504031
      【解决方案5】:

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

      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 的单位是毫秒。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-30
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-17
        相关资源
        最近更新 更多