【发布时间】:2011-11-01 17:37:25
【问题描述】:
我想知道是否有一种有效的方法来测量特定 C 数据结构的实际内存消耗。
目标是根据对这些数据结构进行特定操作后内存使用情况的变化进行基准测试。
我不寻求一种方法来计算正在使用的对象的数量;我确实想知道处于压力下的对象的内存使用量究竟有多大。
是否有标准的方法来做到这一点,无论是在 C 代码中还是从外部? (一些等价于time (1) 实用程序将是一个开始)。
显然,我可以追踪每一个指针并对所有sizeofs 求和。如果这是唯一的方法,请告诉我。我想知道是否有更简单的方法。或者也许是一个图书馆来为我做这件事。
【问题讨论】:
-
我通过使用 perl 脚本解析 mtrace 的输出来进行此类跟踪。 mtrace 是 glibc 的内置 malloc 跟踪器;它可以通过预加载一个小的 .so 库来激活:stackoverflow.com/q/2593284/196561
-
这个话题应该会有所帮助:[benchmarks-used-to-test-a-c-and-c-allocator][1] [1]: stackoverflow.com/questions/2560114/…
-
“我不寻求一种方法来计算正在使用的对象的数量”如果你知道对象的数量和它们的大小,你就会知道内存消耗,你的意思是什么?跨度>
-
您的方式 (sizeof) 似乎是跟踪单个对象消耗的唯一方法。有一些 MS cmd line 工具可用于测量整个程序内存,但由于它在终止时全部由操作系统回收,因此您可以设置断点并以这种方式监控对象的内存消耗。
-
@Andreas,我认为他的意思是这些对象在堆上分配的内存。
标签: c++ c memory benchmarking