0

我正在开发一个定制的嵌入式 Linux 发行版,libc 是 glibc-2.22。

如何在应用程序长时间自动化运行时跟踪应用程序的内存分配/释放。glibc 中是否有挂钩会在我的应用程序中每次发生分配/释放时生成日志?

4

2 回答 2

0

glibc 中是否有挂钩会在我的应用程序中每次发生分配/释放时生成日志?

不。写入登录每个分配将是

  • 太贵了(一个高性能的 malloc 可以在 10s 的指令中分配内存,并且不需要任何系统调用)
  • 几乎没用:通常你不只是想知道分配的 2000 个字节;您还想知道它们是从哪里分配的,这对于生产应用程序中的每次分配都执行太慢了。

您的要求不是唯一的:例如,Google 运行应用程序很多天,开发人员通常想知道哪些部分消耗了多少内存(当您运行 100 个应用程序中的 100 个时,这里和那里浪费的 MB 很快就会增加)。

为此,tcmalloc 自带了heap profiler,可以回答上面的很多问题。jemalloc也是如此。

于 2017-06-11T01:00:27.733 回答
0

有一个带有高性能分配跟踪器的 glibc 分支:

它仍然有点粗糙,但它已在一定程度上成功用于多线程、分配密集型工作负载。

于 2017-07-17T11:21:36.813 回答