Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C和linux下的时间测量_C_Linux - Fatal编程技术网

C和linux下的时间测量

C和linux下的时间测量,c,linux,C,Linux,我想看看C程序占用了多少空间,所以我写道: #include<stdio.h> #include<stdlib.h> #include"memory.h" #include"memory_debug.h" #include<sys/times.h> #include<unistd.h> int (*deallocate_ptr)(memContainer *,void*); void (*merge_ptr)(n

我想看看C程序占用了多少空间,所以我写道:

  #include<stdio.h>
  #include<stdlib.h>
  #include"memory.h"
  #include"memory_debug.h"
  #include<sys/times.h>
  #include<unistd.h>

  int (*deallocate_ptr)(memContainer *,void*);

  void (*merge_ptr)(node *);

  void* (*allocate_ptr)(memContainer *,unsigned long size);

  memContainer* (*init_ptr)(unsigned long );

  diagStruct* (*diagnose_ptr)(memContainer *);

  void (*finalize_ptr)(memContainer *);

  void (*printNode_ptr)(node *n);

  void (*printContainer_ptr)(memContainer *c);

  void info(memContainer *c)
  {
    struct tms *t;
    t=malloc(sizeof(struct tms));
    times(t);
    printf("user : %d\nsystem : %d\n %d",t->tms_utime,(int)t->tms_stime);
    diagnose_ptr(c);
    printf("\n");
    return ;
  }
#包括
#包括
#包括“memory.h”
#包括“memory_debug.h”
#包括
#包括
int(*解除分配(memContainer*,void*);
void(*merge_ptr)(节点*);
void*(*allocate_ptr)(memContainer*,无符号长码);
memContainer*(*init_ptr)(无符号长);
diagStruct*(*diagnose_ptr)(memContainer*);
作废(*最终确定ptr)(memContainer*);
void(*printNode_ptr)(节点*n);
无效(*printContainer_ptr)(memContainer*c);
无效信息(memContainer*c)
{
结构tms*t;
t=malloc(sizeof(struct tms));
次(t);
printf(“用户:%d\n系统:%d\n%d”,t->tms\u使用时间,(int)t->tms\u时间);
诊断ptr(c);
printf(“\n”);
返回;
}
但当我调用此函数时,我得到0个用户时间和0个系统时间,即使我写:

for (i=0;i<100000;++i)
    for (j=0;j<10;++j)
    {}
info(c); 

for(i=0;i编译器可能会优化
for
循环,因为它们什么都不做。请尝试递增
volatile
变量


如果您只想知道时间,请尝试运行
time./app
,它将打印已执行应用的cputime、挂钟时间等。

代码只需在开始时编写一个
volatile
变量,将您的“工作”放在函数中(在单独的文件中),然后在“工作”之后阅读
volatile
,并打印与
volatile
相关的内容

或者使用函数中的一部分计算进行一些简单的计算,或者使用函数返回

您使用的是什么平台(操作系统和编译器)

我不知道你在什么平台上运行,但是关于高精度系统时钟的stackoverflow有几个有用的问题。有几个有用的链接和参考资料


看起来很有用。

下面的演示程序输出非零次:

#include<stdio.h>
#include<stdlib.h>
#include"memory.h"
#include<sys/times.h>
#include<unistd.h>
#include <iostream>
using namespace std;

int main()
{
    int x = 0;
    for (int i = 0; i < 1 << 30; i++)
        x++;

    struct tms t;
    times(&t);
    cout << t.tms_utime << endl;
    cout << t.tms_stime << endl;
    return x;
}

当你运行
time a.out
时,它会显示你期望的时间吗?我想你不在乎,因为你的程序在info后退出,但如果不在乎,你就有内存泄漏。它只是一个片段,是的,time a.out显示时间。我们能使用编译标志吗?问题是,我需要在应用程序中执行这些度量,因为时间需要在代码中的不同点进行比较。它是有效的,似乎我的程序运行得很短,所以值很小。
275
1