【发布时间】:2014-06-21 08:36:09
【问题描述】:
我正在分析我的应用程序中多个线程的内存使用情况。我希望能够跟踪正在运行的任何给定线程的最大分配/当前分配。为此,我计划在 malloc/frees 上进行干预。在每次调用 malloc 期间,我将更新静态映射中特定线程的分配记录,该静态映射将线程 ID 关联到它们的特定元数据记录。我目前在进程退出期间遇到问题。我认为问题在于,当调用所有析构函数进行清理时,必须销毁静态映射和保护它的锁。然而,我插入的 malloc/frees 在更新分析元数据结构之前获取了锁。最终,锁被销毁,但随后对 malloc/free 的调用导致尝试获取不再存在的锁,从而导致段错误。
我担心的另一个问题是,在我插入的 malloc 中生成了对 malloc 的内部调用,以分配映射中的条目。
关于解决基于每个线程分析内存使用问题的方法有什么想法吗?关于跟踪每个线程使用情况的数据结构有什么建议吗?上述方法看起来是否合理,还是有任何其他方法可以解决问题?
【问题讨论】:
-
您是使用 RAII 作为锁还是使用全局/类静态锁?你能描述一下“对 malloc 的内部调用”吗
标签: c++ multithreading memory profiling profiler