c–usrbintime如何衡量内存使用情况?

c–usrbintime如何衡量内存使用情况?,第1张

概述我正在实现一个算法,并希望测量它的时间和内存消耗.在我的帮助下,我编写了自己的测量实用程序,它从/ proc / [pid] / stat读取消耗的用户和系统时间量,以及虚拟内存和驻留设置峰值大小. (我不是100%清楚这两个内存统计数据之间的差异,但这不是手头的问题.)到目前为止一直很好,但随之而来的是第三方实施,我希望比较我自己的程序.由于我不想摆弄它的

我正在实现一个算法,并希望测量它的时间和内存消耗.在我的帮助下,我编写了自己的测量实用程序,它从/ proc / [pID] / stat读取消耗的用户和系统时间量,以及虚拟内存和驻留设置峰值大小. (我不是100%清楚这两个内存统计数据之间的差异,但这不是手头的问题.)

到目前为止一直很好,但随之而来的是第三方实施,我希望比较我自己的程序.由于我不想摆弄它的来源,我无法使用我自己的测量程序收集有关其效率的数据(我可能会,但它需要我重新考虑我的测量方案).所以我发现/usr/bin/time也采取了这些措施.

当我比较输出时,我发现/usr/bin/time确实报告了与我自己的工具相同的时间用法,但内存数据却大不相同.首先,/usr/bin/time不报告有关虚拟内存使用情况的任何内容,它仅提供最大驻留集大小的帖子.其次,/usr/bin/time报告的驻留集大小比我自己的度量大6到8倍.

所以,我一直试图找出/usr/bin/time如何实际执行其测量,以及为什么差异是如此根本.另外,哪个是正确的值?

输出示例(单位为MB):

我使用的是GNU / linux 3.8.13 Mageia 3 x86_64.

编辑:作为一个信心提升,我发现KDE系统监视器支持我自己的实用程序报告的数据.事实上,它从我所在的地方获取信息.所以来自/ proc / [pID] / stat的信任数据应该是非常安全的.但问题仍然存在……

编辑2:在下面的答案的帮助下,推断出wait3()是GNU时间使用的命令.它以手册页getrusage(2)中描述的形式返回数据.在RSS上,它说:

This is the maximum resIDent set size used (in kilobytes).

手册页也指proc / [pID] / stat,它说

ResIDent Set Size: number of pages the process has in real memory. This is just the pages which count toward text,data,or stack space. This does not include pages which have not been demand-loaded in,or which are swapped out.

那么,第二个版本在测量程序的内存使用情况时是否更准确,第一个版本还测量了某种外部库使用情况?最佳答案我没有查看时间来源.但是有wait3和wait4函数来获取子进程的rusage:

pID_t wait3(int *status,int options,struct rusage *rusage);pID_t wait4(pID_t pID,int *status,struct rusage *rusage);

struct rusage包含最大驻留集大小值.

手册页getrusage(2)描述了结构rusage.

总结

以上是内存溢出为你收集整理的c – /usr/bin/time如何衡量内存使用情况?全部内容,希望文章能够帮你解决c – /usr/bin/time如何衡量内存使用情况?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1047092.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)