Igal Yoffe <[EMAIL PROTECTED]> wrote:
> Consider the following code:
> Console.Writeline("{0} {2}",1,(new MyStruct()).ToString());
>
> The number of boxings in such code is between 0 to 2, depending on the
> implementation of the compiler.
>
> Straightforwardly, two boxings are obvious, viz., int boxing and struct's
> boxing before calling ToString. However, it could be the case that in
> compile time the compiler creates "object(1)" (really a trivial
> optimization) for the integer,
The boxed struct needs to live on the heap, so it can outlive the call,
in case Console.WriteLine keeps a reference to the passed-in value.
Therefore, it (the C# compiler) can't remove the box, and must logically
allocate heap memory.
With deeper analysis after run-time linking, a JIT could possibly think
about doing something - but the box instruction is a CIL primitive, so
the logical box would still exist.
-- Barry
--
http://barrkel.blogspot.com/
===================================
This list is hosted by DevelopMentorĀ® http://www.develop.com
View archives and manage your subscription(s) at http://discuss.develop.com