使用 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/