stack vs heap allocation

Why are reference types stored in heap and value types on stack. I know that they are called reference types because they are stored in heap and there is a reference on stack, but why store in heap and not in stack in the first place?

Very nice tutorial with lots of visuals, its better put than anyone here would have time to explain.
http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx?ArticleID=9adb0e3c-b3f6-40b5-98b5-413b6d348b91

(...)When the runtime deals with a value type, it's dealing directly with its underlying data and this can be very efficient, particularly with primitive types.

With reference types, however, an object is created in memory, and then handled through a separate reference – rather like a pointer.
(...)

(...)
The stack is an orderly first-in last-out memory structure, and is used for storing value-type objects. When a method is invoked, the CLR bookmarks the top of the stack, and then allocates memory on top of this for any value type objects (including local variables) that are created. When the method completes, the stack is 'popped' back to the bookmark and all the value-type objects created - and their associated memory - are released.

The heap, on the other hand, can be pictured as a disorderly jumble of objects, suitable for objects managed by reference. When a reference-type object is created, the CLR allocates a block of heap memory, creates the object, then gives us a reference to it. While the object itself will always be created on the heap, its reference may either exist on the heap or stack - depending on whether it’s part of another heap-object, or is a local variable
(...)

The most fundamentally important aspect of stack and heap is dynamic memory allocation. If you allocate an array of size 10 on the stack and then another of the same size they might be allocated in the same sequence on the stack. when the happens how do the grow the first array?? You cant. When you allocate on the heap you have a pointer to a place in memory. If you need more memory you allocate it and are given a pointer to it to keep track of it.

In order to hide the "ugly" records selectors (triangles) in the rowheaders, here are some suggestions.
Microsoft doesn't have a direct method/property to do it. You can only hide the rowheader column.
First solution, the easy way
The first sol…

Summary:
Persistence is the capability of an application to store the state of objects and recover it when necessary. This article compares the two common types of serialization in aspects of data access, readability, and runtime cost. A ready-to…

This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…