What is the heap?

The heap is where malloc(), calloc(), and realloc() get memory. Getting memory from the heap is much slower than getting it from the stack. On the other hand, the heap is much more flexible than the stack. Memory can be allocated at any time and deallocated in any order. Such memory isn’t deallocated automatically; you have to call free(). Recursive data structures are almost always implemented with memory from the heap. Strings often come from there too, especially strings that could be very long at runtime. If you can keep data in a local variable (and allocate it from the stack), your code will run faster than if you put the data on the heap. Sometimes you can use a better algorithm if you use the heap—faster, or more robust, or more flexible. It’s a tradeoff. If memory is allocated from the heap, it’s available until the program ends. That’s great if you remember to deallocate it when you’re done. If you forget, it’s a problem. A “memory leak” is some allocated memory that’s no longer needed but isn’t deallocated. If you have a memory leak inside a loop, you can use up all the memory on the heap and not be able to get any more. (When that happens, the allocation functions return a null pointer.) In some environments, if a program doesn’t deallocate everything it allocated, memory stays unavailable even after the program ends.

Showing Answers 1 - 3 of 3 Answers

psjetha

  • Sep 1st, 2009
 

Heap is a dynamic memory of main memory. In main memory there are several type of memory management like fixed, static, dynamic (it is just memory area which can be used by any task or process but it is not
contiguous memory location).

Now the point is how the C, JAVA or other
language are handling it.

Now in come to C:
There are some functions malloc(), calloc(), realloc() has designed to access random memory from main memory. It is not
necessary it will allocate the memory continuously for all scope variable. it access randomly for all scope variable from memory free space.

By above statement some c programmer will confuse because calloc() is used to allocate
contiguous memory allocation, That's right but for only particular variable for
the calloc() is used, calloc() will check contiguous free spaces for variable in dynamic memory area and allocate the memory for it. In short: Heap is dynamic memory allocation technique for any language.

Now in JAVA and C++:
In JAVA and C++ also having the same functionality. There is new operator in C++ and JAVA. It works same as malloc() and calloc() it is much
intelligent to select the appropriate function in malloc() and calloc(). new operator derived from malloc() and calloc().

Caution in C, C++: when the malloc(), calloc() are used programmer should take care about memory release
also. Otherwise when the variable will out of scope, memory still be occupied by process but it will not be used by process mean memory leakage problem will be.

  Was this answer useful?  Yes

Give your answer:

If you think the above answer is not correct, Please select a reason and add your answer below.

 

Related Answered Questions

 

Related Open Questions