GNU diff の memory exhaustion

CygwinGNU diff で巨大なツリー間の比較をしようとして diff -rq foo/ bar/ しようとすると、

diff: memory exhausted

というエラーが出ることがあります。ツリー構造の相違とファイルの同一性のチェックだけで、どうしてメモリ枯渇(memory exhaustion)を起こすのか、三文プログラマの私には分かりません。find コマンドでツリーの差異を見つける方法でも考えてみよう。