После предоставления той же программы, которая считывает случайный сгенерированный входной файл и эхо-сигнала той же строки, которую он считывает на выходе. Единственное различие заключается в том, что с одной стороны я предоставляю методы чтения и записи из системных вызовов linux, а с другой стороны я использую fread/fwrite.Почему функция fwrite libc быстрее, чем функция записи в syscall?
Сроки ввода приложения с размером 10 МБ и эхо его/dev/null, и убедитесь, что файл не кэширован, я обнаружил, что fwrite libc быстрее по шкале LARGE при использовании очень маленьких буферов (1 байт в случае).
Вот мой выход от времени, используя FWRITE:
real 0m0.948s
user 0m0.780s
sys 0m0.012s
И с помощью системного вызова записи:
real 0m8.607s
user 0m0.972s
sys 0m7.624s
Единственная возможность, что я могу думать о том, что внутренне Libc уже буферные мой вход ... К сожалению, я не мог найти такую информацию в Интернете, поэтому, возможно, гуру здесь могут помочь мне.
«внутренне libc уже выполняет буферизацию ввода». Это именно то, что он делает. Возможно, вы даже можете прочитать исходный код libc, если хотите, и посмотреть, как он это делает. – kquinn