ブロックサイズは、最近の環境であれば数メガバイト単位で大丈夫と思います。 また、ブロックサイズが大きくなると、ブロックサイズ未満だった時の残りの分の処理も、1バイト単位か4バイト単位かの影響が効いてくるようになるので、ここも分けると良いかと思います。 ・ブロックサイズの分ずつ処理する。ブロックサイズ自体を、4の倍数にしておくことでこの段階での処理の端数を気にしなくてよくなる。 ・ブロックサイズに満たない最後の残りの分は、まず、4で割った商の回数、4バイト単位で処理する。 ・最後に、4バイト未満の処理は、0の処理なしを含めて4通りしかないので、条件分岐で1のとき、2のとき、3のとき、0のとき(は処理なし)を個別に記述する。 という感じになると思います。 最後の方は、高速化ゆえの、冗長したプログラムという感じです。 ※なお、あまりそこまでやることは無いのですが、固定回数のループで行う処理を、最高に高速化する場合、ループの回数分、命令を並べるという方法があります。ただし、この方法は可変回数には不向き。