Ist es ineffizient, symbolische Links zu symbolischen Links zu haben?

533
Ogre Psalm33

Wir richten eine Reihe von Makefiles ein, in denen wir ein Include-Verzeichnis auf Projektebene haben möchten, das symbolische Links zu Include-Dateien auf Unterprojektebene enthält. Viele Entwickler von Unterprojekten haben sich dafür entschieden, dass ihre Include-Dateien auch symbolische Links zu einem anderen Verzeichnis sind, in dem sich die eigentliche Software befindet.

Meine Frage ist also, ist es ineffizient, einen symbolischen Link zu einem symbolischen Link zu einer anderen Datei zu haben (z. B. einen C ++ - Header, der während des Kompilierens dutzende Male oder öfter eingefügt wird)?

Beispiel Verzeichnisbaum:

/project/include/ x_header1.h -> /project/src/csci_x/include/header1.h x_header2.h -> /project/src/csci_x/include/header2.h /project/src/csci_x/ include/ header1.h -> /project/src/csci_x/local_1/cxx/header1.h header2.h -> /project/src/csci_x/local_2/cxx/header2.h local_1/cxx/ module1.cpp header1.h local_2/cxx/ module2.cpp header2.h 
2

1 Antwort auf die Frage

2
Rich Homolka

Ich weiß nicht, was Sie ineffizient meinen, aber ich schätze "Nein".

Der Kernel behandelt alle Symlinks, gnumake führt nur ein open () aus und erhält die Datei. Jede App auf Benutzerebene kümmert sich nicht darum (egal, es kümmert sich selten), ob es sich um einen Symlink handelt oder nicht, sie ruft nur die Datei ab.

Die zusätzlichen Ebenen von Symlinks, die der Kernel durchlaufen muss, sind im Vergleich zu der Zeit zum Kompilieren und Schreiben / Leeren des Caches auf der Festplatte unerheblich.

Ich war auf der Suche nach einem guten Gefühl, ob die zusätzliche Ebene der sym Links in mehr E / A-Hits endet, aber ich denke, Ihre Erklärung darüber, wie der Kernel mit den Links umgeht, funktioniert für mich. Ogre Psalm33 vor 13 Jahren 0
@Ogre ja, aber die fs kann es zwischenspeichern, und es wird von allen anderen E / A in den Schatten gestellt. Es ist im Grunde ein extra lstat () für jede Ebene von Symlinks, was nichts im Vergleich zu all Ihren Schreibvorgängen ist. Rich Homolka vor 13 Jahren 0