You are here:

C++/different variables stored where

Advertisement


Question
where are these variables stored in memory and in which part RAM/ROM?
1)static
2)global
3)const
4)auto

Also where is segments present?in RAM or ROM

Answer
where a variable is stored and the life time of the variable is determined my the storage duration of the variable. there are three storage durations supported by C++ : automatic, static and dynamic.

// static storage duration, modifiable
int global_var = 7 ;

// static storage duration, a constant known at compile-time
const int global_const = 9 ;

// static storage duration, constant requiring dynamic initialization
const int global_const2 = std::rand() ;


void foo( int arg )
{
 // automatic storage duration, modifiable
 int auto_var = 9 ;

 // automatic storage duration, a constant known at compile-time
 int auto_const = 9 ;

 // automatic storage duration, constant, dynamic initialization
 const int auto_const2 = std::rand() ;

 // static storage duration, modifiable
 static int static_var = 7 ;

 // static storage duration, a constant known at compile-time
 static const int static_const = 9 ;

 // static storage duration, constant, dynamic initialization
 static const int static_const2 = std::rand() ;

 // int with dynamic storage duration
 int* ptr = new int(100) ;
}

variables with a static storage duration are stored in the 'static data area'; an area memory (of constant size) available as part of the program right from the beginning till the end.

variables with an automatic storage duration are allocated on the 'frame' of the function (typically on the stack).

variables with a dynamic storage duration come from the 'free store'. conceptually, from the pool of 'free' memory available. typically implemented using a 'heap' to hold the memory blocks.

memory for a constant known at compile-time may be optimized away by the compiler; however its address can still be taken. and if it is stored, the virtual memory page may not be writable.

C++ does not specify anything about 'segments', 'RAM', 'ROM' etc.
however, in practice, segments are an anachronism introduced a long time ago; they are obsolete and no longer in use.

most modern hardware architectures and operating systems run a process in a 'virtual' address space. pointers that you use in your program contain virtual addresses; these are translated into physical addresses by the hardware at run-time. the same virtual address may referer to different physical (RAM etc.) addresses at different points of time. and if demand paging is used, it may not have a corrosponding physical address at all at some point of time. (the page has been paged out to disk and you get a page fault).  

C++

All Answers


Answers by Expert:


Ask Experts

Volunteer


vijayan

Expertise

my primary areas of interest are generic and template metaprogramming, STL, algorithms, design patterns and c++11. i would not answer questions about gui and web programming.

Experience

about 15 years or so

Education/Credentials
post graduate engineer

©2016 About.com. All rights reserved.