2011-10-13 151 views
1

我只是讀取article約Boost.Flyweight性能Boost.Flyweight內存消耗

正如你可以在鏈接看到工廠的開銷
- 爲hashed_factory:〜2.5 *的sizeof(字)
- 爲set_factory:4 *的sizeof(字)

的基本問題是.... 爲什麼4字集,而不是零

據我所知,使用哈希意味着計算和存儲哈希鍵,而使用一個集合而不是:它被實現爲紅黑樹,插入和查找需要log(n),所以沒有值被存儲並且內存開銷應該爲零(缺點是在哈希的情況下不會比較一次,而是會有log(n)比較)。錯誤在哪裏?

+0

樹應該如何形成,沒有額外的指針內存? – PlasmaHH

回答

1

RB樹的每個節點都包含一個指向左側子級的指針,指向右側子級的指針,顏色和一塊數據。前三個計數作爲開銷,這意味着它不是0.我不太清楚爲什麼他們說這是3個元素,這3個元素很容易用3個字符合,但也許他們計入其他東西(如父節點指針,這不是嚴格必要的,或內存分配開銷,儘管這不太可能)。

+0

沒錯,它看起來像一個二分查找,我忽略了這個 – cprogrammer

+1

在同一個文檔中有一個腳註說:「對於'std :: set'的某些實現,這個開銷減少到3. *」 – ildjarn

+0

@ildjarn:我認爲它可以在2中完成... – jpalecek