BigListの一部を再帰なしにしたけど、C#の最適化すごいな。
再帰なし。ブランチ rewrite_nonrecursive、Commit 84b25c1
https://github.com/oonyanya/FooList/commit/84b25c172b2f8792ad2d1a645c0b25ff7bf8093d
benchmark start
Allocated GC Memory:61,240bytes
Allocated GC Memory:199,685,064bytes
Allocated GC Memory:199,698,944bytes
Allocated GC Memory:345,442,528bytes
Allocated GC Memory:345,442,552bytes
Allocated GC Memory:345,442,672bytes
clear buffer
Allocated GC Memory:82,728bytes
Allocated GC Memory:41,048,400bytes
Allocated GC Memory:41,048,464bytes
clear buffer
Allocated GC Memory:82,984bytes
再帰あり
benchmark start
Allocated GC Memory:60,752bytes
Allocated GC Memory:199,622,776bytes
Allocated GC Memory:199,636,920bytes
Allocated GC Memory:369,227,696bytes
Allocated GC Memory:369,227,696bytes
Allocated GC Memory:369,227,840bytes
clear buffer
Allocated GC Memory:82,728bytes
Allocated GC Memory:40,996,432bytes
Allocated GC Memory:40,999,688bytes
clear buffer
Allocated GC Memory:82,984bytes
ぐぐったら、末尾再帰はx64だと自動的にスタックを使用しない形してくれるらしい。 https://qiita.com/Tokeiya/items/ff2da14e2254b53278b7 qiitaの内容を読んだ限りだとBigListのInsertInPlace()とかは最適化...
再帰ありならキャッシュ的にも分岐予測的にも有利なんだからあたりまえ すこしはCPUの気持ちになって書いたらいかがか?