wc(1): accelerate word counting
authorcheloha <cheloha@openbsd.org>
Fri, 2 Sep 2022 15:21:40 +0000 (15:21 +0000)
committercheloha <cheloha@openbsd.org>
Fri, 2 Sep 2022 15:21:40 +0000 (15:21 +0000)
commit3a7fc93ec35e245ad13b0c5ca5bf7b5df572713a
treefa992d5393a1f36865e52d3844b0c4d9ed0a3369
parent6e120aea60415804309a2f2b635312bb96f3212e
wc(1): accelerate word counting

wc(1) counts a word whenever a whitespace byte is followed by a
non-whitespace byte.  Because the state machine transition occurs
within the space of a single byte we don't need to use getline(3).

Counting words in a big buffer with read(2) is much faster.  The
overhead varies with the length of a line, but for files with 60-100
byte lines, word counting is about twice as fast when we avoid
getline(3).  In the pathological case where each line is a single
byte, word counting is about ten times as fast when we avoid
getline(3).

Link1: https://marc.info/?l=openbsd-tech&m=163715995626532&w=2
Link2: https://marc.info/?l=openbsd-tech&m=165956826103639&w=2

"Seems reasonable." deraadt@
usr.bin/wc/wc.c