Pavunkumar
Pavunkumar

Reputation: 5335

C : Memory layout of C program execution

I wanted know how the kernel is providing memory for simple C program .

For example :

#include<stdio.h> 
#include<malloc.h> 
int my_global = 10 ; 
main() 
{ 
char *str ; 
static int val ; 
str = ( char *) malloc ( 100 ) ; 
scanf  ( "%s" , str ) ;
printf( " val:%s\n",str ) ;
free(str) ;
return 1 ;
}

See, In this program I have used static , global and malloc for allocating dynamic memory So , how the memory lay out will be ... ? Any one give me url , which will have have details information about this process..

Upvotes: 6

Views: 8173

Answers (5)

Ayush joshi
Ayush joshi

Reputation: 325

  • all the static and global uninitialized variables goes into bss(Block started by Symbol).
  • all Initialized GLobal/Local/static variable further divide as

read only

const int x=10;

& read/write

char Str[]="StackOverFlow"

  • The stack segment is area where local variables are stored. By saying local variable means that all those variables which are declared in every function including main( ) in your C program.

  • Text segment contain executable instructions of your C program, its also called code segment. This is the machine language representation of the program steps to be carried out, including all functions making up the program, both user defined and system. The text segment is sharable so that only a single copy needs to be in memory for different executing programs, such as text editors, shells, and so on. Usually, text segment is read-only, to prevent a program from accidentally modifying its instructions.

  • one more region in the memory layout of a program is Unmapped or reserved segment contain command line arguments and other program related data like lower address-higher address of executable image, etc.

Upvotes: 0

Mohit Rohilla
Mohit Rohilla

Reputation: 108

In practical words, when you run any C-program, its executable image is loaded into RAM of computer in an organized manner which is called process address space or Memory layout of C program.

http://www.firmcodes.com/memory-layout-c-program-2/

Upvotes: 0

Ram Prawesh
Ram Prawesh

Reputation: 11

All static and global variables are stored in the Data segment, all automatic and temporary variables are stored on the stack, and all dynamic variable are stored on the heap.

All function parameters are stored on the stack and there is a different stack frame for each function call this is how recursion function works.

For more on this, see this site.

Upvotes: 1

Clueless
Clueless

Reputation: 4042

Very basically, in C programs built to target ELF (Executable and Linkable Format) such as those built on linux there is a standard memory layout that is created. Similar layouts probably exist for other architectures, but I don't know enough to tell you more about them.

The Layout:

There are some global data sections that are initialized at low memory addresses in memory (such as sections for the currently executing code, global data, and any strings that are created with "..." inside your C code).

Below that there is a heap of open memory that can be used. The size of this heap increases automatically as calls to malloc and free move what is called the "program break" to higher addresses in memory.

Starting at a high address in memory, the stack grows towards lower addresses. The stack contains memory for any locally allocated variables, such as those at the top of functions or within a scope ({ ... }).

More Info:

There is a good description of a running ELF program here and more details on the format itself on the Wikipedia article. If you want an example of how a compiler goes about translating C code into assembly you might look at GCC, their Internals Manual has some interesting stuff in it; the most relevant sections are probably those in chapter 17, especially 17.10, 17.19 and 17.21. Finally, Intel has a lot of information about memory layout in its IA-32 Architectures Software Developer’s Manual. It describes how Intel processors handle memory segmentation and the creation of stacks and the like. There's no detail about ELF, but it's possible to see where the two match up. The most useful bits are probably section 3.3 of Volume 1: Basic Architecture, and chapter 3 of Volume 3A: System Programming Guide, Part 1.

I hope this helps anyone diving into the internals of running C programs, good luck.

Upvotes: 8

John
John

Reputation: 6795

There's a brief discussion at wikipedia.

A slightly longer introduction is here.

More details available here, but I'm not sure it's presented very well.

Upvotes: 1

Related Questions