Saturday, April 30, 2011

Memory Management / Gerenciamento de Memória

Durante a sua execução, um programa é distribuido na RAM 
em dois segmentos, o Code Segment e o Data Segment
 

On this post we talk about the Code Segment and the Data Segment, constants and variables, dynamic and static data

Neste post falamos sobre o Code Segment e o Data Segment, constantes e variáveis, dados dinâmicos e estáticos.


Code Segment and Data Segment

While a program is running, it is organized into two sections in the RAM memory. The first is the Code Segment, where the commands to be executed are stored as assembly code. The second segment is the Data Segment, where the data used by the program are stored.

Consider the Windows Calculator. The machine codes that explain how to perform a sum stay in the Code Segment. The numbers added by the user to perform the sum are stored in the Data Segment. The sum result is stored in the data segment, too.

Constants and Variables

Some data will never change during all the program execution. They are called Constants. The width of a button in the screen in pixels is a constant.

In the other hand we have the Variables. Data that can be changed by the program, like the content of the display.

Static and Dynamic Data

There are examples of data used in memory since the program is open and it will exist until the program is closed. They are Static Data. For example, the calculator allocates memory to hold the content of the calculator display when the program is open and it is maintained until the program is closed.

There are situations when we need additional memory for a while, for example, to create additional buttons when the user switches to the scientific view mode. When the user switches back to the normal view mode, the application frees the extra memory. The system can crash if a program allocates a lot of memory and never frees it. The process of allocating memory is called Dynamic Memory Allocation and to free the unused memory is called the Garbage Collection.


Code Segment / Data Segment

Durante a execução de um programa ele é organizado em duas regiões na memória RAM. O primeiro é o segmento de código (Code Segment), onde o programa fica realmente. Nele ficam os códigos em linguagem de máquina que o computador deverá executar para o programa acontecer. O segundo é o segmento de dados (Data Segment), onde ficam os dados que o programa utilizará para realizar as suas tarefa.

Pense na calculadora do Windows. O conhecimento de como se executa uma soma fica armazenada no Code Segment. Os números que serão somados ficam no Data Segment, assim como o resultado do cálculo.

Constantes e Variáveis

Alguns dados nunca variam desde a abertura do programa até seu fechamento. Assim como o número de pixels de largura que tem uma tecla da claculadora. Estes dados são chamados de Constantes.

Por outro lado, alguns dados varíam durante a execução do programa, assim como qual o número o usuário digitou. Estes dados são chamados de Variáveis.

Dados Estáticos e Alocação Dinâminca

Alguns dados são criados pelo programa assim que ele inicia e duram até o encerramento do programa. Este dados sao estaticos. É o caso da informação que está sendo exibida no display da calculadora.

Por outro lado o programador pode decidir que um dado não vai existir na memória RAM enquanto não for necessário. É o caso da calculadora do Windows, que tem dois modos de exibição. No modo normal é reservado na RAM o espaço para uma determinada quantidade de potões. Se o usuário mudar para o modo de exibição científica, o programa solicitará ao Windows mais memória para poder criar os botões adicionais. Se o usuário voltar ao modo normal, o programa liberará a memória adicional. Desta forma o Windows pode destinar esta memória a outra tarefa. Os dados que não existem na memória durante toda a execução do programa são chamados de dados dinâmicos e a sua obtenção é chamada Alocação Dinâmica. A liberação da memória que não for mais necessária é chamada de Garbage Collection.

Observação: Em inglês, o termo para reservar um espaço de memória é chamado "Memory Allocation". Os pioneiros da programação no Brasil não falavam inglês, então o traduziram como "Alocar Memória", enquanto o correto seria "Aluguel de Memória" ou ainda "Locação de Memória", ou melhor, "Reserva de Memória". Pasmem os senhores, o termo "Alocação de Memória" acabou sendo aceito até no meio acadêmico.

No comments: