Question: So my understanding of C# is that when dealing with an array of objects (rather than simple types) the array will simply be a consecutive array of references to objects, hence the need to call 'new' on each element to actually create the object for it. 

```
Block[] blocks = new Block[10];

foreach(Block block in blocks)
{
    block = new Block();
}

```

This I would imagine would spread `'Block'` instances all over memory. 

I want my actual objects to be stored consecutively in memory is there any way to do this in C#?

Answer: 
If you make your objects *value types* (i.e. `structs`), they will be stored next to each other in an array, the same way the instances of primitives (`int`, `double`, etc.) are stored. For example, if you declare

```
DateTime d[] = new DateTime[10];

```

your `DateTime` objects will be stored consecutively in a memory block, because [`DateTime` is a value type](http://msdn.microsoft.com/en-us/library/system.datetime.aspx). Note that you woulnd't need to call a constructor either: all `struct`s in your array will be initialized and ready to be used.
You're probably worried about L1 cache misses, right?

You're out of luck. Allocating several objects one after the other will most likely result in the objects being consecutive in memory. Unfortunately, when the GC does its job, you might end up with the objects being all over the place.

EDIT: A suggestion

If you really must have them all in one region, you can either make them value types and create an array, or resort to unsafe code and `fix` them in memory.