如何衡量内存消耗情况?
我想知道是否有一种有效的方法来测量特定 C 数据结构的实际内存消耗。
目标是根据对这些数据结构进行特定操作后内存使用情况的变化来制定基准。
我不寻求一种方法来计算正在使用的物体的数量;我确实想知道处于压力下的对象的内存使用量到底有多大。
是否有一种标准方法可以做到这一点,无论是在 C 代码中,还是从外部? (一些相当于 time
(1) 实用程序将是一个开始)。
显然,我可以追踪每个指针并对所有 sizeof
进行求和。如果这是唯一的方法,请告诉我。我想知道是否有更简单的方法。或者也许有一个图书馆可以为我做这件事。
I would like to know if there is an efficient way to measure the actual memory consumption of a particular C data structure.
The goal being to make benchmarks based on how the memory usage changes after specific operations on those data structures.
I do not seek a way to count the number of objects in use; I do want to know exactly how big the memory usage of an object put under stress can get.
Is there a standard way to do that, either in C code, or from outside? (Some equivalent to the time
(1) utility would be a start).
Obviously, I could track down every single pointer and do a sum of all sizeof
s. If this is the only way, please do tell me. I wonder whether there is a simpler way. Or maybe a library to do it for me.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您想在全局级别监控程序的内存使用情况,您可以用自己的函数替换 C++ 中的 new/delete 或 C 中的 malloc/free 并记录内存使用情况。
If you want to monitor the memory usage of the program on a global level you can replace
new/delete
in C++ ormalloc/free
in C with your own functions and log the memory usage.在 Unix 上,对于内存消耗,您可以使用 valgrind 和 Massif 工具(+任何可视化工具),但我不知道它是否适合您的问题,因为它会给您一个程序所有内存消耗的详细视图。
On Unix for memory consumption you can use valgrind with the tool Massif (+ any visualization tool), but I don't know if it is suited for your problem since it will give you a detailled view of all the memory consumption of your program.
是的,cnicutar,在 Linux 上你有 pmap 甚至 pstat。
在 MS 上,有无数的 VStudio 分析工具,具体取决于您对 MS 计算机的贡献(甚至是用于 cmd 行使用的免费工具)。请叫我新手,我没有内存泄漏问题。
Yep, cnicutar, on Linux you have pmap or maybe even pstat.
On MS there are myriad profiling tools for VStudio depending on your contribution to the MS machine (even free ones for cmd line use). Call me a green horn, I don't have issues with memory leaks.