我有两个程序,一个是C ++,另一个是汇编程序。我想比较它们分别运行时使用的内存量。我怎么能这样做?
我正在Windows上进行测试,但我也想知道如何在Linux上进行测试。
答案 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
点击完成
监控内存使用情况:
在菜单开始/程序/管理工具/启动程序性能监视器
点击按钮打开添加流程的窗口
按如下方式填写字段:
对象:流程
计数器:私人字节
实例:需要显示内存占用的进程
点击添加按钮
对每个需要显示内存的进程重复最后两个步骤
关闭添加流程的窗口
在“性能监视器”窗口的底部,有以前选择的进程列表。
如何使用记录的数据
如果您使用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非常有用,特别是在查看你的内存是多么碎片化时。