Alocação Estática de Memória

Palavras-Chave

A alocação estática de memória utiliza de instruções de alto nível (não convertidas diretamente em instruções de um processador) para, explicitamente, informar ao compilador quais são os espaços de memória que o programa escrito deseja utilizar. Esta instrução é conhecida na programação como o ato de “declarar uma variável”.

Para declarar uma variável em uma linguagem de programação geralmente são informados dois dados: o tipo de dado (Ex.: int, float, double etc) e um nome (ex.: numA, numB, sum etc) para a variável. Os tipos de dados e as regras de escrita dos nomes variam de acordo com a documentação da linguagem de programação utilizada. Como, por exemplo, a declaração de três variáveis inteiras numA, numB e sum em linguagem C é dada por:

O nome em uma declaração de variável nada mais é do que um rótulo que indica um espaço de memória. Este espaço de memória é alocado em uma parte do segmento de um processo chamada pilha (ou STACK). Já o tipo de dado caracteriza o tamanho do espaço de memória (quantidade de registros) a ser reservado para o armazenamento e manipulação de uma informação por um programa.

Para a alocação estática de memória um programa controla a pilha de memória “empilhando” os espaços de memória reservados para cada tipo de dado, uns sobre os outros. (Tabela 01)

Tabela 01 – Pilha de Memória na Alocação Estática de Três inteiros numA, numB e sum.

Tipo Nome
Pilha Tamanho
Endereço Estado
#00FF0E 1 byte
#00FF0D 1 byte
#00FF0C reservado 1 byte
#00FF0B reservado 1 byte
#00FF0A reservado 1 byte
int sum #00FF09 reservado 1 byte
#00FF08 reservado 1 byte
#00FF07 reservado 1 byte
#00FF06 reservado 1 byte
int numB #00FF05 reservado 1 byte
#00FF04 reservado 1 byte
#00FF03 reservado 1 byte
#00FF02 reservado 1 byte
int numA #00FF01 reservado 1 byte

Fonte: Autor.

Uma função de um programa é representada numa pilha de memória da seguinte forma:

Variáveis
Parâmetros
Retorno

Adotemos como exemplo uma função para a soma de duas variáveis em linguagem C e o comportamento da memória (Tabela 02):

Tabela 02 – Pilha de Memória na Alocação Estática de uma função para a soma de duas variáveis em linguagem C.

Tipo Nome Pilha Tamanho
Endereço Estado
#00FF10 reservado 1 byte
#00FF0F reservado 1 byte
#00FF0E reservado 1 byte
int sum #00FF0D reservado 1 byte
#00FF0C reservado 1 byte
#00FF0B reservado 1 byte
#00FF0A reservado 1 byte
int numB #00FF09 reservado 1 byte
#00FF08 reservado 1 byte
#00FF07 reservado 1 byte
#00FF06 reservado 1 byte
int numA #00FF05 reservado 1 byte
#00FF04 reservado 1 byte
#00FF03 reservado 1 byte
#00FF02 reservado 1 byte
int #00FF01 reservado 1 byte

Fonte: Autor.

Assim, é possível calcular a quantidade de memória que uma função necessita para ser executada:

Quantidade de memória = Retorno + Parâmetros + Variáveis

Quantidade de memória = 4 Bytes + ( 4 Bytes + 4 Bytes ) + 4 Bytes = 16 Bytes

Uma vez que uma função é finalizada, os bytes da pilha referentes a ela na memória são liberados para o armazenamento de outros dados na memória, ou seja, o tempo de vida do espaço reservado de memória alocado estaticamente é igual ao tempo de vida de execução da função ou bloco.

tempo de vida do espaço de memória = tempo de vida de execução

Isso significa que qualquer variável declarada será alocada no início da função e desalocada no final da função, independente do momento em que se vai utilizar a variável declarada.

Outra característica da alocação estática é a de que o tamanho do espaço de memória alocado para uma função será definido durante o tempo de compilação, ou seja, o compilador irá avaliar a escrita de seu código e determinar a quantidade exata que o código necessita para cada função.

Isso significa que não é possível alterar o tamanho de uma função após a compilação de um programa. Para tal, será necessário alterar o código e recompilar a função em que se deseje alterar o seu tamanho.

Referências

  • PIVA JÚNIOR, Dilermando (et al). Estrutura de dados e técnicas de programação. 1. ed. Rio de Janeiro, RJ: Campus, 2014. 399 p. ISBN: 9788535274370.
  • CORMEN, Thomas H et al. Algoritmos: teoria e prática. Rio de Janeiro: Elsevier, 926 p. ISBN: 9788535236996.
  • TOSCANI, Laira Vieira; VELOSO, Paulo A. S. Complexidade de algoritmos: análise, projeto e métodos. 3. ed. Porto Alegre: Bookman, 2012. 261 p. (Série livros didáticos informática UFRGS, 13) ISBN: 9788540701380.
  • ASCENCIO, Ana Fernanda Gomes. Estruturas de dados: algoritmos, análise da complexidade e implementações em Java e C/C++. São Paulo: Pearson, c2010. 432 p. ISBN: 9788576052216, 978857605816.
  • BRASSARD, Gilles; BRATLEY, Paul. Fundamentals of algorithmics. Englewood Cliffs: Prentice Hall, c1996. xx, 524 p. ISBN: 0133350681.

Livraria