【问题标题】:C++ get run time and memory usage [closed]C ++获取运行时间和内存使用情况[关闭]
【发布时间】:2019-07-05 19:31:02
【问题描述】:

我一直在 LeetCode 上练习我的 C++ 编程,每当我提交解决方案时,它都会告诉我我的程序运行了多长时间以及它使用了多少内存。

我正在使用带有 g++ 的 mac 和 VSCode 在本地编译我的程序。我想找到一种工具或方法,我可以使用它来获取有关我的程序的运行时间和内存使用情况的相同信息,以便我可以尝试对其进行调整以查看对性能的影响。

是否有编译器选项或类似命令行工具或 VSCode 扩展之类的东西可以让我运行我的程序,或者我是否必须向我的程序添加代码来跟踪时间和内存本身?

【问题讨论】:

  • 回到过去,Xcode > Open Developer Tool > Instruments 是您的最佳选择。我没有 Mac,所以我不会密切关注 Current Events,但问:现在 XCode 不是一种选择吗?
  • @paulsm4 我确信 XCode 是强大的 IDE,可以处理很多事情,尤其是如果你正在专门为苹果硬件进行开发,但我通常更喜欢像 VSCode 或 Sublime Text 这样的轻量级编辑器,并使用我大部分工作的终端。
  • 如果你想要“轻量级”,请使用 vi ;) 我的偏好是成熟的 IDE(立即想到 Eclipse、MSVS 或 Android Studio)或文本编辑器。否则,它是“notepad++”或“vi”。和“make”或“gradle”;)无论如何——我提出 XCode 的原因是它明确地拥有你需要的工具。或者你可以使用像 gprof 这样的 gcc 工具(binutils 的一部分,通常与 gcc 一起安装)。
  • @paulsm4 不幸的是,gprof 似乎不适用于 macOS Mojave :(
  • 很公平。我仍然认为尝试 XCode 可能是最快、最简单、最强大的解决方案。但是 Valgrind/callgrind 确实值得一看,并且在某种程度上它是基于 CLI 的,它应该很容易与 VSCode 集成:valgrind.org/docs/manual/cl-manual.html

标签: c++ performance g++ performance-testing benchmarking


【解决方案1】:

您可以使用valgrind 来查找内存泄漏或分析。 Google benchmark 用于代码 sn-p 基准测试。或者您可以使用chrono 自己测量时间。 还有一个在线基准测试工具,quick-bench

更新:

我在 godbolt 上找到了这个很好的信息,它提供了有关迭代或周期数的见解...

感谢@Peter tool llvm-mca 估计每周期指令 (IPC) 以及硬件资源压力。 这是对 CPU 理论模型的模拟,而不是配置文件,但仍然可能有用。它也不包括缓存未命中。

【讨论】:

  • 谢谢,不幸的是 valgrind 和 gprof 不能在 macOS Mojave 上工作(还没有?),谷歌基准测试工作但没有显示内存使用情况(据我所知),快速基准似乎仅用于相对比较基准测试,因为它在负载未知的 AWS 上运行。看起来我必须安装 xcode 才能使用它的 Instruments 分析器,但感觉有点矫枉过正。
  • @DevinCrossman 没问题。看到 valgrind 不适合 Mojave bugs.kde.org/show_bug.cgi?id=399584 他们总是要等到 Apple 发布内核。希望有帮助
  • LLVM-MCA 很有用,但它是对 CPU 理论模型的模拟(我认为假设没有缓存未命中,like IACA),不是配置文件。
  • @PeterCordes 谢谢我编辑。你是对的,他们说缓存命中或未命中不包括在内。
【解决方案2】:

对于简单的输出,您可以使用gnu time

按照该页面上的建议:

/usr/bin/time -f "time result\ncmd:%C\nreal %es\nuser %Us \nsys  %Ss \nmemory:%MKB \ncpu %P" <command>

对于 Mac OSX 上的版本,只需看看这个答案:https://apple.stackexchange.com/a/235404

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    相关资源
    最近更新 更多