I am a bit confused how glibc on linux allocates its memory to various program.These are the few questions:
Is it been allocated from a common heap(i.e is there
The heap (and any other writable memory - stack, BSS, etc) is separate for each process. Within the process the memory might be shared between threads, and it might not be (in case of thread local storage). This is true for newly created applications. For fork
-ed application, the memory is shared until either process writes to it (copy-on-write).
Any read-only memory (like a shared library or running the same application multiple times) will probably be shared between the processes. This is a decision for the kernel executable loader.
A static library is linked directly to the executable, so there is a separate copy for each executable running (unless it's multiple instances of the same executable).
There is no common heap in the libc
sense - this would violate process protection and virtual memory rules. Each process maintains its own heap. The kernel (with the help of the MMU in the processor) maintains the virtual memory tables which map virtual addresses to real memory.
Static libraries are nothing more than linking code at compile time - there is no run time concept of a static library. It is one and the same as the process, and will use its heap.
Each process has its own virtual heap. It may, however, share physical RAM, or not, depending on access. See copy-on-write for some more background.