简体   繁体   中英

Allocation of memory for an Array

All types are derived from the Object class, but the value types aren't allocated on the heap. Value type variables actually contain their values. so how then can these types be stored in arrays and used in methods that expect reference variables ? Can somebody please explain me how these value types are stored on heap when they are part of an array?

Boxing and Unboxing . Also see Here for info pertaining to arrays specifically (part way down). Note this is for object arrays, a valuetype array (eg int[] ) doesn't have any (un)boxing.

Have a look at this question:

Arrays, heap and stack and value types

You can pass the instance of a value type to a method expecting an object (ref class). In this case boxing and unboxing happens.

Value type arrays do not require boxing or unboxing!

The CLR handles arrays of value types specially. Of course an array is a reference type which is allocated on the heap, but the value type values are embedded into the heap record (not on the stack).

Similarly, when a reference type class contains a value type field, the value of the field is embedded into the record on the heap..

Value types may be allocated on stack. This can happen only if they are in parameters or local variables or fields in a another value type which is.

Value types in arrays and fields in classes are stored locally in array or class, instead of pointer being stored there - value types result in more local memory access (performance improvement) and in case of arrays value n is right after value n-1 in memory, something which is not guaranteed with objects in array of reference types (including boxed values in array of object - also no grantee of continuity). In arrays of reference types it is the references that are continual.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM