El sistema operativo proporciona llama así llamadas al sistema para asignar dinámicamente la memoria (malloc, libre, etc.), sino que también proporciona el mecanismo para cargar y ejecutar su programa.
Cuando el programa carga el programa, el segmento de texto (memoria de códigos) está configurado y la memoria estáticamente asignada en su programa está disponible de inmediato. A medida que su código llama a funciones, las variables (estáticamente asignadas) en sus funciones se asignan en la pila y su memoria asignada dinámicamente (usando malloc() por ejemplo) se asigna en el montón. Durante el tiempo que su programa se ejecute, es su responsabilidad (la del programador) administrar la memoria (la falta de hacerlo dará lugar a fugas de memoria y eventualmente hará que un programa de ejecución prolongada se quede sin memoria y se bloqueará, o en extremo los casos, dependiendo del sistema operativo, llevan consigo todo el sistema operativo).
Ver también este artículo: http://www.maxi-pedia.com/what+is+heap+and+stack
enlace muy bueno ... – wrapperm
I segundo wrapperm. :) – smwikipedia
El diseño generalmente se establece (y administra) por el vinculador en lugar del kernel.El kernel simplemente lee la información en la imagen ejecutable y configura el mapa de memoria en consecuencia. El enlazador dinámico se correlacionará si el ejecutable así lo especifica (lo cual es válido para ejecutables dinámicamente vinculados) y maneja muchas cosas. Puede considerar al vinculador como parte del sistema operativo, pero puede crear un enlazador personalizado que haga casi lo que desee, –