Process memory layout

From: Sean (seanatpurdue_at_hotmail.com)
Date: 05/29/05


Date: Sun, 29 May 2005 14:45:40 -0500

I am wondering if my understanding that shared library is loaded at a
place between stack and heap space in memory space, like this:
Please correct me if my understanding is wrong.

--------------
| | high address
---------------
| stack |
| | |
| | |
| V |
| ... |
---------------
| bss of |
| shared lib |
---------------
| text of |
| shared lib |
---------------
| ... |
| heap |
---------------
| bss |
---------------
| initialized |
----------------
| app text |
----------------
| .... | low address
----------------
| kernel add |
----------------

Then, if an executable uses a function(say, asctime() ) in a shared
library(say, libc.so), the loader only resolves that function and loads
it to the process memory space, like the following figure.
If this is true, text/bss of a function is much smaller than a single
page, it seems the system performance is not optimized: this process
uses asctime() to occupy a hole page, and another process(which only
uses atoi() in its executable) uses atoi() to occupy another page. It
seems not efficient. I guess I misunderstood some points.

--------------
| | high address
---------------
| stack |
| | |
| | |
| V |
| ... |
---------------
| bss related |
| to asctime |
---------------
| text of |
| asctime() |
---------------
| ... |
| heap |
---------------
| bss |
---------------
| initialized |
----------------
| app text |
----------------
| .... | low address
----------------
| kernel add |
----------------



Relevant Pages

  • Re: How does managed code work?
    ... Does it work the same way as the native stack with a frame pointer that is the head of a linked list of stack frames where each time we enter a function we create a new stack frame in which new variables are pushed and each time we exit a function the entire stack frame is popped? ... Can someone point me to a discussion of the managed heap? ... How does it prevent memory leaks that occur in COM when two objects reference each other and keep the others reference count nonzero? ... Because objects don't go out of scope, ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Groovy (war Re: [PROST]Re: CDC Plugin fuer Eclipse)
    ... Warum müsste man continuations erlauben Stackvariablen in den Heap zu verschieben? ... Ein activation record speichert die Parameter und lokalen Variablen der Funktion und eine Information, ... Da diese activation records klassischerweise auf einem Stack verwaltet werden, kann man hier Stackspace sparen - Endrekursion ist damit genauso effizient wie eine klassische Iteration mit einem Sprung. ...
    (de.comp.lang.java)
  • Re: Please Explain where will the struct be stored if it is declared inside the Class
    ... forget about structs for a second. ... can be stored either on the stack, or on the heap. ... First, think about the stack. ... A struct would act exactly the same as any of these decimals and ints. ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Is MSDN wrong? or I made a mistake? about static member function
    ... the heap" or some such reference. ... shouldn't we have a uniform notation? ... You can tell a heap object from a stack object by ... the result of trying to build a compiler on a tiny computer by someone who wasn't a very ...
    (microsoft.public.vc.mfc)
  • Re: Stack, Heap, Mfc
    ... >> is put on the heap. ... >> decendant does this not mean that all memory will be on the heap because ... > stack or the heap. ... You first try to limit the recursion to an acceptable ...
    (microsoft.public.vc.mfc)