まずは再帰呼び出し有の場合のソースコードをコンパイルし、実行時間を見てみよう。
動的メモリ確保、malloc/free
20:16:31 result: 489261678 20:16:37 result: 489261678 20:16:42
最適化無:約6秒、最適化有:約5秒
動的メモリ確保、alloca
20:16:42 result: 489261678 20:16:47 result: 489261678 20:16:51
最適化無:約5秒、最適化有:約4秒
事前メモリ確保、malloc/free
20:16:51 result: 489261678 20:16:55 result: 489261678 20:16:59
最適化無:約4秒、最適化有:約4秒
事前メモリ確保、alloca
20:16:59 result: 489261678 20:17:03 20:17:09
最適化無:約4秒、最適化有:error
以上のような結果となった。
gcc の場合に見られたような、malloc/freeの場合の大幅な性能劣化はBorland C の場合には無いようである。
これらの結果から、kp氏の指摘のようにgcc のmalloc/free に関するコンパイルがおかしいのか、それともBorland C のコンパイルが優秀なのかのどちらかを意味していると考えて良いだろう。
引き続き、関数へ展開した場合と、ループに展開した場合についても同様の実測を行おうと思う。
ちなみに、Borland C の場合に事前メモリ確保の場合のalloca の実装で、最適化有にするとエラーで実行が止まってしまうという現象があった。これが何を意味しているのかはよく分からない。