Ich habe ein Problem, das mich für eine lange Zeit verwirrt. Ich frage mich, ob irgendjemand in dieser Angelegenheit Licht ins Dunkel bringen könnte.Linux .so Leistung degeneriert im Vergleich zu direkten kompilierten ausführbaren Datei
Ich habe einen invertierten Index geschrieben, um den Textabruf zu unterstützen. Ich habe 2 Möglichkeiten implementiert, um die Benutzerabfrage zu unterstützen, aber die Leistung ist sehr unterschiedlich.
Der erste Weg: kompilieren Sie den invertierten Index mit einer zusätzlichen Testdatei, die eine Hauptfunktion enthalten, die Benutzerabfrage unterstützen.
file: InvertedIndex.cpp UserQuery.cpp
Kompilierzeit:
g++ -g -Wall -O3 -fPIC -o textSearch1 InvertedIndex.cpp UserQuery.cpp -I ... -L ...
Der zweite Weg: den invertierten Index als dynamische gemeinsam genutzte Bibliothek kompilieren, eine Testdatei enthält Hauptfunktion auf den dynamisch gelinkten gemeinsame Bibliothek.
Datei: InvertedIndex.cpp UserQuery.cpp
Kompilierung:
g++ -shared -fPIC -o libInveredIndex.so InvertedIndex.cpp -I ... -L ...
g++ -Wall -O3 -fPIC -o textSearch2 UserQuery.cpp -I ... -L ... -l InveredIndex
ich beide textSearch1 testen und textSearch2 auf einem invertierten Index-Datei-Pre gebaut, und die Abfragezeit ist sehr unterschiedlich. Die invertierte Indexdatei wurde mit mmap geladen.
Für dieselbe Abfrage (mehr als 2 Schlüsselwörter) ist die von textSearch2 kalkulierte Zeit doppelt so lang wie die von textSearch1 kalkulierte Zeit.
Ich habe viele Abfragen mit mehr als 2 Keywords getestet, aber das Phänomen wiederholt sich.
Ich konnte nicht herausfinden, warum. Ich habe viel gesucht und nichts gefunden.
Bitte helfen Sie mir, wenn Sie eine Idee haben.
Vielen Dank.
Beachten Sie, dass Sie beim Kompilieren der ausführbaren Datei kein '-fPIC' benötigen. Dieses Flag wird nur benötigt, wenn' .o' in einer gemeinsam genutzten Bibliothek kompiliert werden soll. –