Memória
O espaço de memória alocado para um processo é organizado nos seguintes segmentos:
1. Texto ou código (text or code segment) - contém o código de máquina do programa compilado. É uma área que só permite leitura, evitando assim modificações no código.
2. Dados inicializados (initialized data segments) - armazena todas as variáveis do programa (global, estáticas, constantes e externas) que recebem um valor antes do início da execução.
3. Dados não inicializados (uninitialized data segments) - armazena todas as variáveis do programa (global, estáticas e externas) não inicializadas. Quando o arquivo é carregado na memória para ser executado, estas variáveis são inicializadas com zero. Esta área é também conhecida como segmento BSS (Block Storage Start).
4. Pilha (stack segment) - armazena variáveis locais, parâmetros passados para alguma função e endereço de retorno após execução de alguma função. Dados são adicionados e removidos usando o método LIFO (Last In, First Out). Quando este segmento precisa ampliar sua área de memória, a pilha cresce para baixo (os novos endereços terão valores menores que os já alocados).
5. Pilha inversa (heap segment) - armazena variáveis alocadas dinamicamente (por exemplo, com as funções malloc( ) e calloc( ) da linguagem C ou com as chamadas de sitema brk( ) e sbrk( ) do Linux). Quando este segmento precisa ampliar sua área de memória, a pilha cresce para cima (os novos endereços terão valores maiores que os já alocados).
Fonte: http://www.uniriotec.br/~morganna/guia/processo.html