2009-08-27 34 views
1

在TC散列數據庫中插入大約8百萬條記錄後,我陷入了分段錯誤。一切都被插入後,我關閉數據庫,但我的代碼(tchdb.c)的這部分陷入分段錯誤:TokyoCabinet:hdb-> close()的分段錯誤

static void tchdbsetflag(TCHDB *hdb, int flag, bool sign){ 
    assert(hdb); 
    char *fp = (char *)hdb->map + HDBFLAGSOFF; 
    if(sign){ 
    *fp |= (uint8_t)flag; //SEGFAULT HERE! 
    } else { 
    *fp &= ~(uint8_t)flag; 
    } 
    hdb->flags = *fp; 
} 

更多especifically在註釋行。

的DB打開這樣的:

tchdbopen(hdb, db_file, HDBOWRITER | HDBOCREAT)) 

的DB是tunned有:

tchdbtune(hdb, 25000000, -1, -1, HDBTLARGE); 
tchdbsetcache(hdb, 100000); 

的.tch文件大約2GB(2147483647個字節)。有趣的是,只有當我插入大約800萬條記錄時纔會發生這種情況。有2或3百萬的DB關閉。插入800萬條記錄需要大約3個小時,因爲我從文本文件中讀取數據。

任何想法?

謝謝

回答

3

剛剛解決了這個問題。 我在32位系統上,TC只能處理這樣的系統中高達2GB的數據庫。 解決方案是使用「--enable-off64」選項構建TC。像這樣:

./configure --enable-off64 
make 
make install