Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何对内存消耗进行基准测试?_C++_C_Memory_Benchmarking - Fatal编程技术网

C++ 如何对内存消耗进行基准测试?

C++ 如何对内存消耗进行基准测试?,c++,c,memory,benchmarking,C++,C,Memory,Benchmarking,我想知道是否有一种有效的方法来测量特定C数据结构的实际内存消耗 目标是根据对这些数据结构进行特定操作后内存使用情况的变化来制定基准 我不寻求一种方法来计算使用中的物品数量;我确实想知道一个被施加压力的对象的内存使用量到底有多大 有没有一种标准的方法可以做到这一点,用C代码还是从外部?(一些相当于时间的(1)实用程序将是一个开始) 显然,我可以跟踪每个指针,并对所有sizeofs进行求和。如果这是唯一的办法,请告诉我。我想知道是否有更简单的方法。或者是一个库来为我做这件事。是的,cnicutar,

我想知道是否有一种有效的方法来测量特定C数据结构的实际内存消耗

目标是根据对这些数据结构进行特定操作后内存使用情况的变化来制定基准


我不寻求一种方法来计算使用中的物品数量;我确实想知道一个被施加压力的对象的内存使用量到底有多大

有没有一种标准的方法可以做到这一点,用C代码还是从外部?(一些相当于
时间的
(1)实用程序将是一个开始)


显然,我可以跟踪每个指针,并对所有
sizeof
s进行求和。如果这是唯一的办法,请告诉我。我想知道是否有更简单的方法。或者是一个库来为我做这件事。

是的,cnicutar,在Linux上你有pmap,甚至pstat


在MS上,根据您对MS机器的贡献,有无数用于VStudio的评测工具(即使是用于cmd行的免费工具)。如果你想监视程序在全局级别的内存使用情况,你可以在C中使用“C++”或“代码”> MalOC/Free/<代码>,用自己的函数替换“代码>新的/删除的/<代码>,并记录内存使用情况。

< > UNIX内存消耗,可以使用ValgRen和工具Massif。(+任何可视化工具),但我不知道它是否适合您的问题,因为它将为您提供程序所有内存消耗的详细视图。

我通过使用perl脚本解析mtrace的输出来进行跟踪。mtrace是glibc的malloc tracer内置的;它可以通过预加载一个小库来激活。因此,库:本主题应该很有帮助:[benchmarks-used-to-test-a-c-and-c-allocator][1][1]:“我不寻求一种计算使用中对象数量的方法”如果你知道对象的数量及其大小,你就会知道内存消耗,例如,你的意思是什么?你的方式(sizeof)似乎是跟踪单个对象消耗量的唯一方法。有一些MS cmd行工具用于测量整个程序内存,但由于它在终止时全部由操作系统回收,因此您可能能够设置断点并以这种方式监视对象的内存消耗。@Andreas,我想他指的是通过t在堆上分配的内存hose对象。这听起来很好,起初我没有意识到new/delete可以重载,但经过浏览,我相信这是一种非常有效的堆管理方法。是的,在这种情况下,技术术语不是重载,而是替换;)@约翰:实际上有两个
操作符new
。全局
new
/
delete
可以由您的实现替换,如果您不替换它们,编译器会提供一个默认版本。您也可以按类重载它们。我会尝试一下。我想您可以按结构类型对结果进行排序,对吗?@antoine:Massif只有一个实验性的可视化工具(例如,与Callgrind相反)。@Thadee:不,Massif与语言无关(或几乎无关)。它为每个分配提供堆栈状态(函数调用),因此您可以在代码中跟踪它们的来源。