【问题标题】:How to know what allocated a given chunk of memory? [closed]如何知道分配给定内存块的内容? [关闭]
【发布时间】:2014-11-09 00:46:32
【问题描述】:

我想知道,给定任何内存块,例如类的实例或std::vector,我可以推断出哪个函数(可能来自 *alloc 函数族)分配给定的一块内存甚至更好,调用newallocator(如果使用)在我的应用程序中创建了可寻址空间。

【问题讨论】:

  • 开箱即用是不可能的。您可以创建自己的自定义分配方案来跟踪它。
  • 您几乎必须编写分配器,以便它分配一些额外的空间,并在该内存中记录数据以识别分配器(例如,分配器的地址)。
  • @JerryCoffin 并不是说​​如果没有一些额外的信息,仅仅一个地址会有什么好处。
  • @ddriver “开箱即用”是什么意思?像gdb 这样的东西难道不能做到这一点吗?还是 valgrind 进行一些逆向工程?

标签: c++ c memory-management


【解决方案1】:

C/C++ 内存分配器不跟踪这条数据——它只跟踪每个分配区域的大小。没有办法知道是谁分配的。

如果您想要一个更有建设性的答案,您需要告诉我们您想要达到的目标。如果目标是调试您的代码,那么您应该使用第三方内存调试器——valgrind 可能是目前最好的。

【讨论】:

  • valgrind 存在 1 个大问题,这基本上就是为什么我现在不再使用它了,因为我已经为几乎所有我可以预先调试的东西提供了消毒剂; valgrind 所做的所有事情,都是因为逆向工程,而不是因为它依赖于某些特定的 ABI/文件格式,如 DWARF 提供准确和精确的调试信息。
【解决方案2】:

有一些分析工具,例如strace,它可以显示被调用的函数。

【讨论】:

  • 这相当于“有根据的猜测”,在多线程或并发访问的世界中,它只会是一团糟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
相关资源
最近更新 更多