Funcionamento da memória
Muita gente que programa não sabe como realmente a memoria é administrada e isso graças as camadas de abstrações criadas pelo sistema operacional, que tentam facilitar a vida não importando se é um programador ou um usuário final.
Introdução
Muita gente que programa não sabe como realmente o sistema
operacional faz para administrar sua memória. Isso graças as
camadas de abstrações criadas pelo S.O. que tentam facilitar
a vida não importando se é um programador ou um usuário final.
Afim de facilitar o aprendizado do funcionamento da memória, vamos imaginar a memória como sendo um grande vetor para se guardar dados, mas quero destacar que esse tipo de pensamento é uma forma muito "grosseira", pois leva a pensar que os dados vão ser alocados de uma maneira linear e/ou seqüencial.
Afim de facilitar o aprendizado do funcionamento da memória, vamos imaginar a memória como sendo um grande vetor para se guardar dados, mas quero destacar que esse tipo de pensamento é uma forma muito "grosseira", pois leva a pensar que os dados vão ser alocados de uma maneira linear e/ou seqüencial.
A memória é dividida em 2 tipos: Stack e Heap, mas alguns livros dizem que existem 3 tipos: automática, estática e dinâmica. A diferença básica entre esses tipos é nada mais que a forma como ele é tratado. A Stack (ou Automática/Pilha) é onde guardamos as variáveis locais nos programas. Já a Heap (ou estática) é assim chamada porque seus valores permanecem até o fim do programa. Na memória Heap, por exemplo, guardamos variáveis globais, constantes e variáveis definidas "static" no C.
Por fim, toda a memória que não é estática nem automática é dinâmica. A memória dita dinâmica viria após a Heap. Vejamos uma figura de como ficaria essa divisão da memória:
Assim podemos notar claramente que conforme for sendo solicitado mais memória. O S.O. vai reservando memória conforme a definição já dada. O jeito mais comum de se imaginar a memória é ela por vetor de linhas (de pé?) e não por colunas (deitado?). Assim, a alocação da memória é sempre de cima pra baixo, dependendo da área que se vai utilizar.
Você deve estar se perguntando: "Como isso pode ser útil pra minha vida?". Eu respondo, é "Cultura". :D
Falando sério, isso ajuda a deixar mais claros alguns erros muito comuns. Primeiro, imaginar a memória como nós fizemos. Eu li em algum lugar que "quanto mais fácil de se visualizar a memória, mais longe da realidade ela está", mas que facilita, facilita.
O segundo lugar que podemos usar isso é pra compreender erros comuns como "Stack Overflow", que nada mais é a "pilha sobrecarregada", ou seja, ela cresceu tanto que está invadindo uma área que originalmente não é dela.
Terceiro, "Cultura é essencial" hehehehe.
[]'s
NOTA: Já ia esquecendo, as figuras originais foram pegas do site www.olinux.com.br, no curso de C deles. As adaptei pra usar aqui. Espero que tenham gostado.
NOTA2: Tentei ser o mais generico possivel.