difference between stack & heap (general, for a newbie)


http://www.velocityreviews.com/forums/t280931-difference-between-stack-amp-heap-general-for-a-newbie.html


Sean Cook wrote:
>
> Andrey (and others),
>
> What I should’ve asked is "what is the scope of data when allocated
> from the heap, and what is the scope of data when allocated from the
> stack (where “heap” and “stack” are not standards, but are merely
> common terms.)
Now we are getting somewhere
The scope of memory allocated on the ‘stack’ is the scope
of the enclosing block. They get destroyed when the enclosing
block is finished. Thats why they are called ‘auto’ objects.
Example:
{
int i;
} // block ends, i gets destroyed
The scope of memory allocated on the ‘heap’ is different. Objects
get allocated with new (or malloc) and get destroyed when a corresponding
delete (or free) is executed. Blocks do no longer influence the scope of
these objects.
Example:
int* pJ;
{
int* pI = new int [20];
// Note that 2 things are happening here:
// 1.) An int array is allocated on the free store (aka heap).
// This array will be there until a corresponding delete [] is
// executed
// 2.) A variable pI is created. Since pI was not dynamically created
// with new or malloc, it is an auto object (created on the stack)
// Thus the enclosing block determines its lifetime
pJ = pI;
} // block ends. pI gets destroyed, but not so the int array. It
// will stay there in memory until a delete is done.
delete [] pJ; // now the memory in the free store (aka heap) gets
// released.
>
> And also, is there a performance difference, in general, of objects
> allocated on the stack versus those allocated on the heap, or is this
> a completely meaningless question?
Free store allocation usually takes more time

Karl Heinz Buchegger

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s