在 TC 哈希数据库中插入大约 800 万条记录后,我遇到了分段错误。插入所有内容后,我关闭了数据库,但在这部分代码(tchdb.c)中发现了分段错误:
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;
}
更具体地说,在注释行。
数据库是这样打开的:
tchdbopen(hdb, db_file, HDBOWRITER | HDBOCREAT))
数据库调整为:
tchdbtune(hdb, 25000000, -1, -1, HDBTLARGE);
tchdbsetcache(hdb, 100000);
.tch 文件大约 2GB(2147483647 字节)。有趣的是,只有当我插入大约 800 万条记录时才会发生这种情况。有 2 或 3 百万的数据库可以正常关闭。插入 800 万条记录大约需要 3 个小时,因为我从文本文件中读取数据。
有任何想法吗?
谢谢