使用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 池示例是否错误?或者我在这里错过了什么?