C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 54 を表示中)
■30610 / )  Re[4]: 参照型の等値演算子でboxingを回避したい
□投稿者/ NyaRuRu (80回)-(2008/12/27(Sat) 22:51:54)
2008/12/27(Sat) 22:58:25 編集(投稿者)
2008/12/27(Sat) 22:52:21 編集(投稿者)

No30609 (ほにゃ さん) に返信
> IL_0002: box !!T   ← x
> IL_0008: box !!T ← y
> ではないかと、想像してるのですが。

Tが値型のときは確かにこの部分でボックス化が発生します.
Tが参照型のときは,JIT コンパイル時に無視されます.何もおきません.

http://standards.iso.org/ittf/PubliclyAvailableStandards/c042927_ISO_IEC_23271_2006(E).zip
ISO/IEC 23271:2006 Partition III p.103
>If typeTok is a reference type, the box instruction does nothing.

今回の場合はGeneric Methodの制約のため実行時にTが値型となることはありえないはずです.
よって,IL には box 命令が存在したとしても,実行時にボックス化が起こることはありません.

念のため注意しておいて欲しいのですが,ボックス化という概念を必要とするのは値型のみです.
参照型に対しては,そもそもボックス化という概念が必要がありません.
よって,値型が一切出てこないコードでボックス化を気にしているのであれば,どこかに勘違いがあるように思います.
返信 編集キー/


管理者用

- Child Tree -