使用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池示例是错误的吗?或者我在这里遗漏了什么?
答案 0 :(得分:1)
答案 1 :(得分:0)
我想说,talloc的元数据内存占用量非常低,因为它存储在元数据中的所有内容都是指针和主树状结构,用于保存上下文,父母和子关系。