Неэффективно ли иметь символические ссылки на символические ссылки?

412
Ogre Psalm33

Мы устанавливаем серию Make-файлов, где мы хотим иметь каталог включения уровня проекта, который будет иметь символические ссылки на файлы включения уровня проекта. Многие разработчики подпроектов решили, чтобы их включаемые файлы также были символическими ссылками на еще один каталог, в котором находится настоящее программное обеспечение.

Поэтому мой вопрос: неэффективно ли иметь символическую ссылку на символическую ссылку на другой файл (например, для заголовка C ++, который может быть включен десятки или более раз во время компиляции)?

Пример дерева каталогов:

/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 ответ на вопрос

2
Rich Homolka

Not sure what you mean inefficient, but my guess is 'no'.

The kernel handles all the symlinks, gnumake just does an open() and it gets the file. Any user level app doesn't care (well, rarely cares) about whether it's a symlink or not, it just gets the file.

The extra levels of symlinks the kernel needs to go through are insignificant vs. the time to compile and write/flush cache to disk.

Я искал интуитивно понятное ощущение, что дополнительный слой ссылок sym заканчивается в большем количестве операций ввода-вывода, но я думаю, что ваше объяснение о том, как ядро ​​обрабатывает ссылки, работает для меня. Ogre Psalm33 13 лет назад 0
@ Да, да, но fs может его кешировать, и он затмевается всеми остальными операциями ввода-вывода. Это в основном дополнительный lstat () для каждого уровня символических ссылок, который ничто по сравнению со всеми вашими записями. Rich Homolka 13 лет назад 0

Похожие вопросы