Talloc分配的内存开销是多少 - 来自池?

时间:2013-10-10 20:33:26

标签: c memory-management pool

使用talloc API而不是malloc和朋友时,内存开销是多少?

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

直观地说,人们会认为正常的talloc分配的开销非常高,因为标头必须包含指向父/子,标签等的指针。但是,另一方面,来自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池示例是错误的吗?或者我在这里遗漏了什么?

2 个答案:

答案 0 :(得分:1)

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

UPD

Pool在新的0.7版本中实现

答案 1 :(得分:0)

我想说,talloc的元数据内存占用量非常低,因为它存储在元数据中的所有内容都是指针和主树状结构,用于保存上下文,父母和子关系。