2

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

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

直观地,人们会认为普通talloc分配的开销非常高,因为标头必须包含指向父/子、标签等的指针。但是,另一方面,来自talloc池的分配预计内存不足开销,因为池在单个操作中(或以类似堆栈的方式)被释放。

从池中分配时,文档没有为这些分配指定内存开销

看talloc.c的代码,即中心线

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

(然后回溯到 - 比如说 -__talloc()由 eg 调用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 )

这与文档的示例冲突。

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

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

4

2 回答 2

1

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

UPD

池在新的 0.7 版本中实现

于 2013-12-08T11:16:10.237 回答
0

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

于 2015-08-22T03:32:53.380 回答