我写了一个rb-tree实现。使用malloc分配节点。最好在开头分配一个大表,并使用该空间分配节点,并在每次表溢出时将大小加倍。假设分配时间很长,我不确定这会使插入操作更快一些。
答案 0 :(得分:1)
分配一个大块(并自行拆分)与分配大量小块是否更好的问题适用于许多情况。并没有一个通用的答案。但是,一般情况下,可能分配大块的速度要快一些。但加速(如果有的话)可能不会很大。根据我的经验,在高度并发的系统中进行单个大型分配通常是值得的,并且大量使用动态分配。如果您有一个单线程应用程序,我的猜测是每个节点的分配构成了插入操作的非常小的成本。
一些一般性的想法/评论:
最终,您需要测试它并测量差异。您可以做的一件简单的事情就是编写一个简单的“丢弃”测试,分配您希望处理的节点数量,并计算所需的时间(然后可能还需要时间来释放它们)。这可能会给你一些分配成本的大概估计。