首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getrusage是如何工作的,rusage结构中到底是什么?

getrusage是如何工作的,rusage结构中到底是什么?
EN

Stack Overflow用户
提问于 2014-12-21 09:40:00
回答 1查看 10.4K关注 0票数 3

我在试着理解为什么

代码语言:javascript
复制
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}

那么,有没有人能给我解释一下,或者给出一些很好的链接来解释这个?

我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-21 09:47:42

下面介绍您感兴趣的两个子结构:

ru_utime这是在用户模式下执行所用的总时间,以时间结构(秒加微秒)表示。

ru_stime这是在内核模式下执行所用的总时间,以时间结构(秒加微秒)表示。

为了防止内存崩溃,您的系统有两个“特权级别”,称为内核模式和用户模式。为了保持快速和简单,你的用户模式不能看到所有的内存,它不能与I/O设备通信,并且只能真正进行数字运算。对于任何更复杂的事情(例如内存页面分配、文件系统读/写、将内容打印到屏幕上),它必须让内核来做,因为内核可以访问所有这些操作。这是通过一种称为“系统调用”的机制来完成的;请阅读这篇维基文章以供进一步阅读:http://en.wikipedia.org/wiki/System_call

从高层次上讲,ru_utime结构返回程序执行实际计算所花费的时间,ru_stime结构返回程序在进行磁盘访问、打印到屏幕等操作时等待内核响应的时间。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27586001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档