Bom, continuando o tópico, ainda estamos falando sobre fundamentos. Como os programas rodam na memória.
Um programa é um arquivo parado no disco. Quando ele é executado, o sistema operacional copia ele para a RAM e cria um processo: O programa em execução, com sua própria área de memória. É possível ter vários processos do mesmo programa ao mesmo tempo.
O sistema operacional dá a cada processo um espaço de memória isolado. Um processo não enxerga a memória do outro. Isso é segurança e estabilidade. Se um trava, os outros continuam.
Aqui entram dois conceitos importantes nesse universo:
Stack e Heap.
Cada vez que uma função é chamada, ganha um "bloco" no topo da pilha com suas variáveis locais e o endereço de onde voltar. Quando a função termina, o bloco é removido. Organizada, automática e bem rápida, mas pequena e de tamanho definido. Isso é a Stack.
Os dados precisam viver além de uma função, ou cujo o tamanho só se sabe em tempo de execução. Por exemplo Todo new Pedido vai para o Heap. É grande e flexível, mas lento de gerenciar. Em C# quem limpa o heap é o Garbage Collector.
No caso do Heap, o Garbage Colector, só consegue limpar aquele objeto que já não é mais referenciado, como uma classe criada em loop, o GC o encontra, pois não está sendo adicionada em local algum, mas se por acaso, nós adicionarmos essa classe a uma coleção, o Garbage Collector, não vai encontra-la e isso gera um vazamento de memória.
Sendo honesto, nunca estudei muito a fundo essa parte. Eu já ouvi esses nomes, mas nunca tinha ido procurar o que eles realmente eram. Acredito que minha decisão de estudar do zero tenha sido válida. Em breve posto mais conteúdo e aprendizado sobre isso.
Top comments (1)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.