c - talloc 分配的内存开销是多少——来自池?

标签 c memory-management pool

使用 talloc 时的内存开销是多少? API 而不是 malloc 和 friend ?

talloc pool 分配时的内存开销是多少? ?

直觉上,人们会认为正常的 talloc 分配的开销非常高,因为 header 必须包含指向父/子、标记等的指针。但是,另一方面,预计来自 talloc 池的分配将内存开销低,因为池是在单个操作中(或以类似堆栈的方式)释放的。

从池中分配时 the documentation指定 no memory overhead对于这些分配。

查看 talloc.c 的代码,即 central line

tc = talloc_alloc_pool(ptc, TC_HDR_SIZE+size, prefix_len);

(然后追溯到 - 比如说 - __talloc(),它被例如 talloc_size() 调用)

分配大小为 n 的开销似乎是:

align16(n) + TC_HDR_SIZE = align16(n) + 96 // on x86-64

对于大小为 n 的池和来自该池的大小为 m 的 r 个分配,开销为:

align16(n) + TC_HDR_SIZE > r * ( align16(n) + TC_HDR_SIZE )

这与 examples of the documentation 冲突.

例如,来自 talloc 池的 uint64_t 分配使用了 112 字节 的池内存。

我的观察是否正确? talloc 池示例是否错误?或者我在这里遗漏了什么?

最佳答案

我已经实现了 simplified talloc api在 64 位系统上有开销 32-49 字节。开销取决于您要使用的功能。 talloc 池将在未来的版本中实现。

更新

池在新的 0.7 版本中实现

关于c - talloc 分配的内存开销是多少——来自池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19305694/

相关文章:

c - 将多维数组传递给 C 中的函数

c - 如果 cd 尝试切换到不存在的目录,则输出错误 - 自己的 shell

C- 为什么char c=129 会转换成-127?

memory-management - 你什么时候不想使用垃圾收集?

python - 为什么map_async()不需要pool.close()和pool.join()?

C 中的 crypt() 函数不起作用

c++ - 在内存中按顺序排列全局/静态对象

visual-c++ - 如果内存泄漏会发生什么?

python - Gevent 与 Stream Server 的数据库连接池