c语言的cpu占用率

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言的cpu占用率相关的知识,希望对你有一定的参考价值。

用VS2012编的C程序,不是很复杂但计算次数相当多的程序,比如用归递实现汉诺塔问题,我想知道在运行的时候CPU是完全利用的吗?
还有比如编写一个无限循环不断printf的程序,屏幕上打印字符串的速率是什么控制的。。

1、cpu执行一条命令的用时是固定的,例如一条printf语句在编译成机器码后交给cpu执行的话,cpu就需要1毫秒,这样就是1秒打印1000个字符串(仅是举例,实际时间可能不一样,但大体上是固定的)。

2、某个时刻可能CPU利用率会达到100%,但因为本身windows系统是多进程的,windows负责进程间切换。所以可能看起来是,但其实还是有一些windows消息(比如鼠标移动)的传递和处理,只不过大部分的cpu资源可能会被这个程序占用了
参考技术A cpu执行一条命令的用时是固定的,例如一条printf语句在编译成机器码后交给cpu执行的话,cpu就需要1毫秒,这样就是1秒打印1000个字符串(仅是举例,实际时间可能不一样,但大体上是固定的) 参考技术B 某个时刻可能CPU利用率会达到100%,但因为本身windows系统是多进程的,windows负责进程间切换。所以可能看起来是,但其实还是有一些windows消息(比如鼠标移动)的传递和处理,只不过大部分的cpu资源可能会被这个程序占用了。本回答被提问者和网友采纳 参考技术C 这和CPU的处理速度有关就是主频时钟,CPU是时分复用的,不会死掉,分配给某个进程的资源也是有限的

Linux c 语言怎么方便的读取 cpu,磁盘信息

我附上我的代码给你参考。

CPU占用 需要查看/proc/stat 的信息

磁盘需要 使用statfs这个函数来确认文件所包含的信息。

我附上我的代码给你参考。

我的代码支持CPU使用率(占用率),内存占用率,及磁盘占用率。

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <unistd.h>

#include <sys/vfs.h>
#include <error.h>
#define Gsize (1024.00*1024.00*1024.00)
#define Msize (1024.00*1024.00)

#ifndef EXT2_SUPER_MAGIC
#define EXT2_SUPER_MAGIC 0xef53
#endif

double time_so_far();
float get_cpu_rate();
float get_memory_rate();
float get_disk_rate();

int main(int argc,char *argv[])

    get_cpu_rate();
    get_memory_rate();
    get_disk_rate();
    return 0;

double time_so_far()
    struct timeval tp;
    if(gettimeofday(&tp,(struct timezone *)NULL) == -1)
        perror("gettimeofday");
    return ((double)(tp.tv_sec))+(((double)tp.tv_usec)*0.000001);

float get_cpu_rate()
    FILE *f1;
    double ti,tf;
    char c[10],d[10];
    int t,i1,i2,i3,i4,i5,i6;
    
    ti=time_so_far();
    f1=fopen("/proc/stat","r");
    fscanf(f1,"%s\\t%d\\t%d\\t%d\\n",c,&i1,&i2,&i3);
    fclose(f1);
    printf("%s\\t%d\\t%d\\t%d\\n",c,i1,i2,i3);
    usleep(1000000);

    tf=time_so_far();
    f1=fopen("/proc/stat","r");
    fscanf(f1,"%s\\t%d\\t%d\\t%d\\n",c,&i4,&i5,&i6);
    fclose(f1);
     printf("%s\\t%d\\t%d\\t%d\\n",c,i4,i5,i6);
    t=(i4+i5+i6)-(i1+i2+i3);
    printf("%d\\n",t);
    printf("cpu usage: %.2f%%\\n",( t/((tf-ti)*100) )*100 );


float get_memory_rate()
    FILE *f1;
    int itemp1,itemp2;
    char c[10],d[10];

    f1=fopen("/proc/meminfo","r");
    fscanf(f1,"%s\\t%d\\t%s",c,&itemp1,d);
    printf("memory total is %d Kb\\n",itemp1);
    printf("memory total is %.2f Mb\\n",itemp1/1024.0);
    fscanf(f1,"%s\\t%d\\t%s",c,&itemp2,d);
    printf("memory free is %d Kb\\n",itemp2);
    printf("memory free is %.2f Mb\\n",itemp2/1024.0);
    fclose(f1);
    printf("men usage : %.2f%%\\n",((itemp1-itemp2)*100.0)/itemp1);



float get_disk_rate()
    struct statfs *fs;
    long long blocks,bfree;
    if(statfs("/",fs) != 0)
        
            perror("stafts");
            printf("exit\\n");
            exit(1);
        
    blocks=fs->f_blocks;
    bfree=fs->f_bfree;
    //if(fs.f_type == EXT2_SUPER_MAGIC)
    //
        printf("Disk size of / is %.2f G\\n",blocks*fs->f_bsize/Gsize);
        printf("Free Disk size of / is %.2f G\\n",bfree*fs->f_bsize/Gsize);
        printf("Disk usage of / is %.2f%% \\n",bfree*100.0/blocks);
    //

参考技术A 都在/proc/ 下面 cpu信息在/proc/cpuinfo 启动时间在/proc/uptime 单位是s /proc/stat 里面有cpu执行的时间,用户态,系统态,空闲都有本回答被提问者采纳

以上是关于c语言的cpu占用率的主要内容,如果未能解决你的问题,请参考以下文章

怎样解决软件启动CPU占用率瞬间变高,导致软件启动变慢的问题;C++ Builder(BCB) 开发的大概有30个FORM

cpu占用率让曲线指挥

如何查看 android 线程 cpu占用率

linux ps命令,查看某进程cpu和内存占用率情况, linux ps命令,查看进程cpu和内存占用率排序。 不指定

cpu占用率

CPU占用率高都有哪些原因