Является ли stat() дорогостоящим системным вызовом? - программирование
Подтвердить что ты не робот

Является ли stat() дорогостоящим системным вызовом?

Действительно ли системный вызов stat() стоит дорого? Я где-то читал, что это дорогостоящий системный вызов. Это правда? Если да, то есть ли другие альтернативы?

4b9b3361

Ответ 1

В типичной настройке stat(2), fstat(2) и lstat(2) являются единственными разумными методами получения информации о файле. Если вы видите проблемы с производительностью, было бы полезно профилировать ваше приложение и посмотреть, что произойдет.

В профиле скомпилируйте с помощью gcc -pg и запустите исполняемый файл с помощью gprof(1).

Вы могли бы, возможно, переключиться на использование более крупной библиотеки, такой как Qt, но это вряд ли справится с проблемами производительности, и они, вероятно, будут использовать stat(2) в любом случае.

Итак, насколько это дорого или нет, нет разумных альтернатив.

Тем не менее, как и в комментарии Джима Макнамары, это не дорого по этим причинам. Поскольку нет другой альтернативы, программисты glibc и linux сделали ее максимально возможной.

Ответ 2

Вы всегда можете использовать strace для своего исполняемого файла. Нет необходимости перекомпилировать. Эта функция позволяет вам получить фактическое время выполнения для каждого системного вызова.

Ответ 3

Возникает вопрос: "Дорогой v/s обязательно".

Каждый процесс в Unix работает в двух режимах: "Пользовательское пространство" и "Ядро пространства", а когда вызывается системные вызовы типа open(), write(), stat(), процесс переходит из пользовательского пространства в ядро Режим, который является дорогостоящим, но только если мы не делаем ничего значимого в этом системном вызове. Как если бы вы использовали stat(), чтобы печатать только последнее время доступа к файлу, и больше ничего не делаем, то, вероятно, этого следует избегать.

Итак, во-первых, должна быть веская причина для вызова stat(). Во-вторых, если вы хотите сравнить относительное время выполнения различных частей кода, используйте любой инструмент профилирования, который предоставит вам точную статистику, чтобы доказать, какой вызов функции дорог, а какой нет.