Solved

stack vs heap allocation

Posted on 2006-07-01
3
997 Views
Last Modified: 2008-02-01
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?
0
Comment
Question by:srinivas_vemla
  • 2
3 Comments
 
LVL 10

Expert Comment

by:dkloeck
ID: 17024296
http://www.albahari.com/value%20vs%20reference%20types.html

(...)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
(...)
0
 
LVL 10

Accepted Solution

by:
dkloeck earned 125 total points
ID: 17024297
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


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

Author Comment

by:srinivas_vemla
ID: 17024867
Thanks dkloeck... nice explanation and great article
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
What is "public object" in C#? 3 64
SSRS subreport with parameter 3 47
VB.NET (2008) - Refactoring Question 2 23
Moving code from one TFS branch to another 3 33
Introduction This article series is supposed to shed some light on the use of IDisposable and objects that inherit from it. In essence, a more apt title for this article would be: using (IDisposable) {}. I’m just not sure how many people would ge…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

839 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question