Memory allocation in c++

Possible Duplicate:
Stack,Static and Heap in C++

Hi guys,

I am currently preparing for interviews, and quite often i see questions like, where are "static" variables or where are "local"/"global" variables stored and im totally puzzled.

I'm aware of two kinds of memory: Stack and Heap. Other than this, are there any other types of memory, where different kind of variables are stored. At a few places, i even read something about "Data Segment", but im not sure as to how these things map to each other. Can anyone provide me with any links/explanations to different types of memory and where all the different kinds of variables are stored, preferably related to C++.

Thanks, Chander


To simplify just a bit, there are basically three main storage areas you need to be concerned with:

  • Global data -- a single static memory location outside the stack or heap. These are the variables declared not local to any function. (The distinction evident by the C/C++ "static" keyword is really just about which parts of the program are aware of the name of a global variable.)

  • Stack data -- dynamic, but pushes and pops with function calls.

  • Heap data -- the stuff returned by new/malloc, truly dynamic and the memory persists until a delete/free, rather than when functions exit.


  • There is a third kind of storage and that is called static. Essentially, this is storage for data items within the runtime memory image of the excutable. It cannot be allocated or released, and it's lifetime is essentially that of the program. In C++, class static variables are stored in this area as are globals.

    In the old days, some processor architectures (particularly x86) used segmented addressing. In this case, static data would reside in the data segment. In order to access static data, you used an address relative to the segment base, which was in the DS or ES register. However, since at least the mid-1990s, OS architectures have gone to a flat memory model, where all segments coalign and cover the entire memory space. So data segments should not come up in any current interview question.

    链接地址: http://www.djcxy.com/p/13792.html

    上一篇: 用于在C ++中实例化对象的不同方法

    下一篇: 在c ++中分配内存