gpt4 book ai didi

c - getrusage 是如何工作的以及 usage 结构内部到底是什么?

转载 作者:行者123 更新时间:2023-12-04 02:22:08 25 4
gpt4 key购买 nike

我正在尝试了解如何

int getrusage(int who, struct rusage* usage)

为了计算我的一个程序的运行时间而工作。
我 Handlebars 册页改红了,大概 10 次,但仍然无法得到它。试图在网上找到一些东西,但除了关于这个函数的手册页什么都找不到。
我不清楚的是 usage 结构中存储了什么——手册页不是很清楚——所以我试了用调试器运行它并直接查看里面的内容,但仍然不明白,特别是两个结构 - 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 }
循环后:
ru_utime = { tv_sec = 4, tv_usec = 677000}, ru_stime = { tv_sec = 0, tv_usec = 2000}

所以,谁能解释一下或者提供一些很好的链接来解释这个问题?
我将不胜感激。

最佳答案

你感兴趣的两个子结构描述如下:

ru_utime This is the total amount of time spent executing in user mode, expressed in a timeval structure (seconds plus microseconds).

ru_stime This is the total amount of time spent executing in kernel mode, expressed in a timeval structure (seconds plus microseconds).

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

在高层次上,ru_utime 结构返回您的程序花费在实际计算上的时间量,ru_stime 结构返回您的程序已经花费的时间量在进行磁盘访问、打印到屏幕等时一直在等待内核的回答。

关于c - getrusage 是如何工作的以及 usage 结构内部到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27586001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com