Chat
Chat

Reputation: 69

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?

Upvotes: 2

Views: 11446

Answers (4)

Danny Varod
Danny Varod

Reputation: 18068

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.

Upvotes: 0

MattDavey
MattDavey

Reputation: 9017

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..

Upvotes: 0

Stephan
Stephan

Reputation: 4247

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!

Upvotes: 1

George Duckett
George Duckett

Reputation: 32428

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

Upvotes: 3

Related Questions