你如何获得程序使用的内存量?

时间:2009-09-26 06:45:58

标签: c++ performance memory assembly comparison

我有两个程序,一个是C ++,另一个是汇编程序。我想比较它们分别运行时使用的内存量。我怎么能这样做?

我正在Windows上进行测试,但我也想知道如何在Linux上进行测试。

9 个答案:

答案 0 :(得分:5)

在一个shell中运行该程序。打开另一个shell并运行'top'命令。它将列出正在运行的进程并将它们消耗的内存放在家中你可以,我想,轮询/ proc / yourprocessid / stat来查看它随着时间的推移使用了多少内存。

答案 1 :(得分:5)

在Windows上,您可以使用性能监视器。

效果监视器使用情况

  • 从“开始”菜单/“管理工具/性能”

  • 启动性能监视器
  • 如果您想开始记录:

  • 选择性能日志和提醒>浏览器左侧的当前日志选项。

  • 选择新日志设置。

  • 为日志指定一个合适的名称,例如performance_Server for Server

  • 它会提示您一个菜单。在“常规”选项卡中,单击“添加”按钮,然后选择要监视的进程。 (更改要处理的性能对象,对于“从列表中选择计数器”选择“专用字节”,对于“从列表中选择实例”,选择要监视的进程。)之后单击“添加并关闭”。现在根据测试用例要求更改间隔。现在转到“日志文件”选项卡,将日志文件类型更改为csv或tsv格式。现在申请并按OK。

  • 如果您想开始/停止记录:

  • 选择您要开始和停止的特定日志。

  • 在上面的工具栏中,您会看到开始和停止按钮。

  • 如果要检查日志文件的内容:

  • 点击选项/数据自...

  • 选择要查看的日志文件,单击“确定”

  • 转到图表屏幕(查看/图表)

  • 点击修改/添加到图表

  • 将所需的项目添加到图表中。 (如果要检查内存泄漏,那么您需要查看进程的PrivateBytes和它们的_Total)

  • 从图表中读取值(最小值和最大值显示在图表底部)

  • 如果您想监控网络传输:

  • 显示图表屏幕(查看/图表)

  • 单击编辑/添加以记录,然后选择项目网络接口\发送字节如果您在dl中设置

  • 或者如果您在CRS-PC +中设置了网络Inerface \ Bytes

  • 点击完成

  • 监控内存使用情况:

  • 在菜单开始/程序/管理工具/启动程序性能监视器

  • 点击按钮打开添加流程的窗口

  • 按如下方式填写字段:

  • 对象:流程

  • 计数器:私人字节

  • 实例:需要显示内存占用的进程

  • 点击添加按钮

  • 对每个需要显示内存的进程重复最后两个步骤

  • 关闭添加流程的窗口

  • 在“性能监视器”窗口的底部,有以前选择的进程列表。

如何使用记录的数据

  1. 现在使用写字板或Excel打开文件Perfmon_.csv或Perfmon_.tsv。
  2. 如果您使用Excel打开文件,然后使用“另存为”选项,请以Microsoft Excel格式保存文件。

答案 2 :(得分:4)

在Linux上,尝试valgrind。这是一个神奇的工具,有太多的功能让凡人完全理解。请查看valgrind的{​​{3}}。

答案 3 :(得分:3)

Windows任务管理器可以显示每个进程的内存使用情况。我想你可以使用Valgrind,但我没有看到这一点。在Linux上,使用Valgrind或ps。

答案 4 :(得分:2)

在Windows上,您可以使用GetProcessMemoryInfo Function

以下是如何使用它的示例:
Collecting Memory Usage Information For a Process

答案 5 :(得分:0)

取决于您的操作系统 - 您可能希望有工具告诉您应用程序运行时消耗的内存。

通过检查代码来尝试推断答案非常困难,运行应用程序,使用平台的诊断。

答案 6 :(得分:0)

根据程序的大小,这几乎是不可行的。

如果它们不是很大,那么你可以看到它们分配了多少内存;例如,一个int占用4个字节,一个char占用1个字节,等等。即使在x86机器上,程序集的内存使用量也非常透明。只要您忠实地跟踪对象创建和内存破坏/分配,Cpp几乎是透明的。

如果程序很大,您将需要使用特定工具来跟踪/分析内存使用情况,例如GlowCode(http://www.glowcode.com/summary.htm)。

答案 7 :(得分:0)

在Windows上,您可以使用Microsoft的性能监视器来执行此操作。开始,运行,“perfmon”。此工具将报告有关流程的各种统计信息,并为您提供图表。一般来说,你会对报道“私人工作集”感兴趣。这将告诉您进程为自己使用保留了多少内存。

如果你想获得堆的使用,并且想要以编程方式进行,你应该查看CRT Debug Heap

我对Linux不太确定,抱歉。

答案 8 :(得分:0)

在Windows上,我发现Address Space Monitor非常有用,特别是在查看你的内存是多么碎片化时。