投稿数 - 437, コメント - 53885, トラックバック - 156

template vs generics

http://blogs.wankuma.com/episteme/archive/2006/11/21/46522.aspx
επιστημηさんが「template vs generics」を解説しているので、私は generics 側に立ってみる。(επιστημηさんが template 寄りという事はないだろうけど)

広く既知だが、template は爆発する。型パラメータ毎に新たなソースコードを生成し全く別の型として定義するので、下手な使い方をするとサイズが大幅に増える。

generics も「値型」を型パラメータに指定したときは template とほぼ同様の事が起こる。List<int> と List<double> はそれぞれ新しい型として生成され、それぞれスペースを食う。ただし、この展開は実行時まで保留されるので、アセンブリのサイズが大きくなるという事はない。この実装の利点は、もちろん値型のボクシングとボクシング解除を避け、パフォーマンスを上げる事にある。

型パラメータに「参照型」を指定した場合はどうなるのか。誤解を恐れずに簡単に言ってしまえば、どのような型パラメータを指定しても List<Object> というたった一つのクラスが使いまわされるので余分なスペースを食う事はない。型制約がある場合は Object の代わりにその制約型が使われるだろう。

これらの知識は以下に書いてある。
http://msdn2.microsoft.com/ja-jp/library/f4a6ta2h(VS.80).aspx

投稿日時 : 2006年11月26日 17:54

フィードバック

No comments posted yet.

コメントの投稿

タイトル
名前
URL
コメント