Besides chiyo.c which is the final version, there are few other versions of CRC32 program sources included for comparison. crc32.c is the original version. This is where all other versions are derived from. crc32-linux.c is the Linux optimized version. Since CRC32 is a very simple algorithm, most of the time is spent doing file IO. Hence memory mapped file IO is used here, and on my system it almost always outperforms the original version. Also, the CRC table is statically linked instead of built at run time (using gen_table.c). crc32-win32.c is the Win32 optimized version, which uses static tables, memory mapped IO, and inline assembly for inner loop. Nevertheless, it consistently runs *slower* than the original version, because paging in Windows is so slow. Ideally, we want to map the entire file at once, but you would run out of memory for large files, causing the system to thrash and run even slower. Another possible optimization would be nonblocking IO, either using OS specific functions or multiple reader/consumer threads. But the regular version runs pretty fast already, so it's not really worth it.