【问题标题】:TCMalloc - get size of allocation for a pointerTCMalloc - 获取指针的分配大小
【发布时间】:2018-08-23 05:13:00
【问题描述】:

使用 TCMalloc - 给定堆分配对象,有没有办法获得对象的分配大小(仅表示 malloc 调用中传递的大小)? 我要求一种“可靠”的方法(即,假设分配大小存储在指针之前,则不返回字长)

【问题讨论】:

  • 为什么需要这个?标准malloc也没有这样的东西?
  • @Michael Walz - 我认为我为什么需要这个并不重要。另外,TCMalloc 是比标准 malloc 更全面的库,还有堆分析工具等...
  • “为什么”通常很重要(参见:xyproblem.info
  • @Michael Walz - 当每个请求独占一组线程时,请求的分配计数。每个请求都会不时检查一次,以查看它是否满足内存限制。想法是代理现有的 malloc/free 调用,对每个请求的计数器进行最少的管理。当调用 malloc 时,大小很容易知道,但在调用 free 时则不知道
  • 您可以编写自己的 mymalloc/myfree 函数来调用原始的 malloc/freeTCMalloc/free 或任何其他函数,并将分配的大小存储在实际数据之前。但这会增加一点开销。

标签: c++ c memory-management free tcmalloc


【解决方案1】:

自1.6版起,TCMalloc includes:

size_t tc_malloc_size(void*);

返回从参数开始的可用分配大小。

它与 glibc 的 malloc_usable_size(或 BSD 的 malloc_size)相同,libtcmalloc 包含这两个函数的别名。

但是,它不一定是最初请求的大小。它可能更大(通常是)。我不相信 TCMalloc(或大多数其他 malloc 实现)保留该元数据,因此 (afaik) 既不可靠也不可靠的机制可以返回到原始 malloc 调用并检查请求大小。

【讨论】:

  • 我试过了,调用 malloc_usable_size,它似乎有 tc_malloc_size 的别名(我不能直接调用 tc_XX api,因为库是预加载的)。
猜你喜欢
  • 2018-09-08
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 2014-08-21
  • 2021-07-23
  • 2017-06-26
相关资源
最近更新 更多