我刚刚阅读了关于Boost.Flyweight Performance
的article正如您在链接中看到的那样,工厂的开销是
- hashed_factory
:~2.5 * sizeof(word)
- set_factory
:4 * sizeof(word)
基本问题是...... 为什么要设置4个字而不是零?
据我所知,使用哈希意味着计算和存储哈希键,而使用一组不是:它实现为红黑树,插入和查找需要log(n),所以没有值存储并且内存开销应该为零(缺点是,在散列的情况下,您将进行log(n)比较而不是一次比较)。错误在哪里?
答案 0 :(得分:1)
RB树的每个节点都包含一个指向左子节点的指针,指向右子节点的指针,颜色和一个数据。前三个计为开销,这意味着它不是0.我不太确定为什么当3个元素很容易适应3个单词时为什么会说它为4,但也许它们会计入其他内容(如父节点指针,这不是绝对必要的,或者是内存分配开销,尽管这不太可能。)