2014-07-25 105 views
2

我創建了一個Trie來存儲幾百萬字。序列化Trie

typedef struct trie 
{ 
    struct trie* c[38]; 
    unsigned int occ; 
} trie_t; 

occ只是一個數字,用於存儲單詞的出現次數。如果0:節點不是一個單詞。 c [38]用於:26個字母+10個數字+'_'+'。'

我想序列化它,以便我可以將它映射回內存,而無需每次都構建它。 問題是我用malloc來創建Trie,所以所有的內存都不是連續的。

我想強制Trie創建的內存是連續的,所以我可以用offset來替換指針並序列化整個結構。

這是正確的路嗎? 它甚至可能與malloc或我應該建立自己的內存分配器來做到這一點?

+0

那麼這個靜態一旦建立 - 你不更新它? –

+0

是的。沒有更新。 Trie是從不會改變的單詞列表創建的。 – IggY

+0

然後只是建立它。理解你可能會「彎曲」一些C規則,並且不得不依靠可怕的「無證行爲」來進行尋址,但沒有什麼大不了的。 –

回答

2

分配單個結構數組並按順序使用它們。如果你不知道你將需要的結構的總大小,那麼你重新分配數組。

最終結果是指向全部的連續的結構數組。

+0

嗯......你的意思是我只是分配一個大數組,做一個「my_malloc(大小)」,它有一個靜態的int「偏移量」指向我在這個數組中的位置,並執行:return array [offset];偏移+ =大小; (+ realloc的東西),對吧? – IggY

+0

如果您決定使用某個功能,就會出現這種情況。你有兩個變量total_size和current_position,並在達到total_size時重新分配。既然你有一個結構數組,你不會按大小遞增1。 – this

+0

「既然你有一系列的結構,你會增加1而不是大小」:我總是犯這個錯誤:) – IggY