1

在 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 个小时,因为我从文本文件中读取数据。

有任何想法吗?

谢谢

4

1 回答 1

3

刚刚解决了问题。我在 32 位系统上,TC 在此类系统中只能处理高达 2GB 的数据库。解决方案是使用“--enable-off64”选项构建 TC。像这样的东西:

./configure --enable-off64
make
make install
于 2009-08-28T03:49:01.273 回答