【问题标题】:C++ Program Memory CalculationC++ 程序内存计算
【发布时间】:2012-05-18 00:58:11
【问题描述】:

如何计算某个程序在运行时所用的时间和使用的内存?

我是 C++ 的初学者。对于我的问题,我已经看到了很多答案和不同的代码,但所有这些我都不明白。有没有简单的方法可以做到这一点?

如果有更复杂的方法,请附上解释。

谢谢。

【问题讨论】:

  • 如果您是初学者,为什么需要这样做?
  • 进一步强调 K-ballo 的观点,如果您是 C++ 的初学者,您不应该从头开始,然后逐步进入更高级的主题,例如这里提出的主题吗?
  • 别人问没有坏处,只是因为你不想回答。正如旧广告所说:“孩子可能会问的问题。但不是幼稚的问题。” youtube.com/watch?v=JDejZySftjE
  • 我之所以这么问,是因为这个问题让我想起了以前做的功课……
  • @K-ballo 好吧,这是评论而不是答案,所以好吧。 :) 但是,我还是更喜欢鼓励好奇心,让人们在好奇心爆发时放弃。从历史上看,当我有足够的动力这样做时,我通过在我的舒适区之外推动而学到了最多的东西。 “乔治,怎么了?” “斯坦利,你不想知道……” “哦。嗯。天哪,那我为什么要问?:-/”

标签: c++ visual-c++


【解决方案1】:

现在没有(也不会有)一个通用的工具可以告诉你一个任意程序在没有实际运行的情况下需要多长时间,在一般情况下可能需要很长时间。这是一个有趣的 CS 概念,值得深思:

http://en.wikipedia.org/wiki/Halting_problem

简而言之:无法提前知道您的程序运行所需的时间,除非您在相当受限且数学严格的环境下运行,并且已在提供某些保证的系统上适当地对代码进行了样式化:

http://en.wikipedia.org/wiki/Real-time_operating_system

如果您有经验,您可以有点通过查看数据结构的大小以及它们的数量来估计程序的内存占用规模。 C++ 运算符sizeof 可以帮助您确定任何单个对象消耗的具体字节数,但它不会告诉您用于“簿记”幕后的内存量。

但同样,您通常只需要运行它并使用进程监视器来查看会发生什么。很难预测,您只需凭经验检查实践中会发生什么:

Tracking CPU and Memory usage per process (Windows)

monitor a program's memory usage in Linux

【讨论】:

    【解决方案2】:

    如果您使用的是 Windows,内置的 Windows 任务管理器将在“进程”选项卡中显示您的内存使用情况。同样,Mac OSX 具有“活动监视器”,它会显示您的内存使用情况。程序中的数字会随着您的程序更改状态以及分配/取消分配内存而实时更改。

    至于测量执行时间,您可以使用计时器函数获取执行前后的当前系统时间,然后进行数学运算。

    QueryPerformanceCounterQueryPerformanceFrequency 用于 windows,gettimeofday 用于 mac/linux 机器。

    如果您需要有关应用程序的更具体的性能相关信息,AMD CodeAnalyst 之类的分析应用程序可以帮助您找出主要瓶颈所在。

    【讨论】:

    • AMD CodeAnalyst 是否能够进行内存分析?它看起来更像一个 CPU 分析器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多