Я выполнял массовый анализ положительных целых чисел с помощью scanf ("% d", & someint )
. Поскольку я хотел проверить, не является ли scanf узким местом, я реализовал наивную целочисленную функцию синтаксического анализа, используя fread
, например:
int result;
char c;
while (fread(&c, sizeof c, 1, stdin), c == ' ' || c == '\n')
;
result = c - '0';
while (fread(&c, sizeof c, 1, stdin), c >= '0' || c <= '9') {
result *= 10;
result += c - '0';
}
return result;
Но, к моему удивлению, производительность этой функции (даже с встраиванием) примерно На 50% хуже.Разве не должна быть возможность улучшить scanf для специализированных случаев? Разве fread
не должен быть быстрым (дополнительная подсказка: целые числа ( edit: в основном ) 1 или 2 цифры)?