Учитывая количество реализаций для стандартной библиотеки C, невозможно дать определенный ответ, но наиболее распространенные из них, похоже, следуют тем же общим рекомендациям.
По определению, getchar()
использует потоковую инфраструктуру стандартной библиотеки C, то есть FILE
и ее дружественные функции. В большинстве современных реализаций библиотеки C потоки файлов буферизуются до определенной степени, размер и поведение буфера обычно настраиваются с помощью setvbuf()
.
Мне известен, по крайней мере, один случай ( glibc ), где к файлам можно при желании - через дополнительную опцию fopen()
- получить доступ через отображение памяти (т.е. mmap()
) вместо read()
/ write()
. Чтобы избежать проблем при смешивании с вызовами функций более высокого уровня, таких как scanf()
, getchar()
означает , вынудили использовать те же структуры буферизации.
Без информации от профилировщика я бы больше беспокоился о структурной сложности любого кода, использующего getchar()
, чем о каких-либо проблемах производительности, вызванных его использованием.