【发布时间】:2016-05-11 10:24:12
【问题描述】:
我遇到了一个困扰我很久的问题。我想知道是否有人可以对这个问题有所了解。
我一直在写一个倒排索引来支持文本检索。我实现了2种方式来支持用户查询,但是性能差别很大。
第一种方式: 使用包含支持用户查询的主要功能的额外测试文件编译倒排索引。
文件:InvertedIndex.cpp UserQuery.cpp
编译:
g++ -g -Wall -O3 -fPIC -o textSearch1 InvertedIndex.cpp UserQuery.cpp -I ... -L ...
第二种方式: 将倒排索引编译为动态共享库,测试文件包含链接到动态共享库的主函数。
文件:InvertedIndex.cpp UserQuery.cpp
编译:
g++ -shared -fPIC -o libInveredIndex.so InvertedIndex.cpp -I ... -L ...
g++ -Wall -O3 -fPIC -o textSearch2 UserQuery.cpp -I ... -L ... -l InveredIndex
我在一个预建的倒排索引文件上同时测试了textSearch1和textSearch2,查询时间相差很大。倒排索引文件由 mmap 加载。
对于相同的查询(超过2个关键字),textSearch2所花费的时间是textSearch1所花费的时间的两倍。
我已经测试了很多超过 2 个关键字的查询,但这种现象重复出现。
我不知道为什么。我搜索了很多,一无所获。
如果您有任何想法,请帮助我。
非常感谢。
【问题讨论】:
-
请注意,编译可执行文件时不需要
-fPIC,只有在编译.o以用于共享库时才需要该标志。
标签: c++ linux shared-libraries inverted-index