我在试着理解为什么
int getrusage(int who, struct rusage* usage)工作是为了计算我的一个程序的运行时间。
我修改了手册页,可能有10次了,但还是看不到。我试着在网上找一些东西,但是除了关于这个函数的手册页什么都没有找到。
我不清楚的是rusage结构中存储了什么内容-手册页不是很清楚-所以我尝试用调试器运行它,直接看到里面是什么,但仍然不理解它,特别是两个结构- timeval ru_utime和timeval ru_stime -是如何工作的。
它们内部的内容采用不同的值,有时为0,有时为2000等等。
我用一个for循环运行了一个简单的程序,该循环不断地分配和释放内存。我使用秒表来查看实际花费了多少时间,它花了5.23秒。但我在这些结构中看到的似乎完全无关:
循环前:
ru_utime ={ tv_sec = 0,tv_usec = 1000},ru_stime ={ tv_sec = 0,tv_usec = 1000}
After循环:
ru_utime ={ tv_sec = 4,tv_usec = 677000},ru_stime ={ tv_sec = 0,tv_usec =677000}
那么,有没有人能给我解释一下,或者给出一些很好的链接来解释这个?
我将不胜感激。
发布于 2014-12-21 09:47:42
下面介绍您感兴趣的两个子结构:
ru_utime这是在用户模式下执行所用的总时间,以时间结构(秒加微秒)表示。
ru_stime这是在内核模式下执行所用的总时间,以时间结构(秒加微秒)表示。
为了防止内存崩溃,您的系统有两个“特权级别”,称为内核模式和用户模式。为了保持快速和简单,你的用户模式不能看到所有的内存,它不能与I/O设备通信,并且只能真正进行数字运算。对于任何更复杂的事情(例如内存页面分配、文件系统读/写、将内容打印到屏幕上),它必须让内核来做,因为内核可以访问所有这些操作。这是通过一种称为“系统调用”的机制来完成的;请阅读这篇维基文章以供进一步阅读:http://en.wikipedia.org/wiki/System_call
从高层次上讲,ru_utime结构返回程序执行实际计算所花费的时间,ru_stime结构返回程序在进行磁盘访问、打印到屏幕等操作时等待内核响应的时间。
https://stackoverflow.com/questions/27586001
复制相似问题