を使用して正の整数の大規模な解析を行ってい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
はずです(追加のヒント:整数は(編集:ほとんど)1桁または2桁です)?