A memória possui 3 segmentos: text/code segment, stack segment e heap segment.
-
Text/code segment: onde o código compilado do programa reside. É a representação do programa em linguagem de máquina com as operações que devem ser realizadas, incluindo todas as funções, tanto as definidas pelo usuário, como as do sistema.
-
Stack segment: espaço onde variáveis automáticas que estão dentro de funções serão alocadas. Usa o conceito de FIFO (first in, first out), ou seja, dados são alocados e desalocados por apenas uma das "pontas", o Top do stack. Ex: todas as variáveis declaradas no main() entram no stack. Se main() chamar func1(), func1() - junto com parâmetros que tiver - passa para o Top do stack. Quando func1() retornar algum valor (return), ela é desalocada do stack. Evidente que ficará lixo nessa área da memória, deixado por um prévio uso.