Artigo no estilo: Curso

Por que eu devo ler este artigo:O artigo é útil para desenvolvedores que desejam se aprofundar em Estruturas de Dados, gerenciamento de memória, ponteiros e alocação dinâmica, que em geral, são temas de muita importância e muito utilizados no cotidiano nas mais variadas situações.

Com conhecimentos avançados nestes temas conseguimos desenvolver formas de armazenamento robustas e que podem ser reaproveitadas em vários projetos de software.

Nesta série de artigos o leitor saberá escolher qual a estrutura de dados mais adequada para determinadas situações, além de aprofundar vários tópicos importantes da linguagem Delphi.

Um dos segredos de termos softwares rápidos com certeza passa pela correta implementação e utilização de estruturas de dados. A forma como os dados estão organizados durante o processamento fazem com que o sistema tenha uma melhor ou pior performance.

O estudo das mais variadas estruturas de dados costuma ser uma das maiores dificuldades para os desenvolvedores. Observa-se principalmente nas universidades os problemas de muitos alunos de compreenderem esta área da Ciência da Computação que é tão importante no desenvolvimento de softwares.

Nos dias atuais, a maioria das pessoas utiliza a agenda de um telefone celular para fazer o gerenciamento de seus contatos, sejam números de telefones ou e-mails. Este simples recurso de armazenar telefones e e-mails envolve duas tarefas importantes.

A primeira é definir como o dado será armazenado na memória, pois é necessário de alguma forma persistir a informação. A segunda tarefa é disponibilizar operações de criação, recuperação, ordenação, alteração e remoção de dados desta agenda.

A primeira tarefa influi muito na performance de qualquer aplicativo, pois quando informações são armazenadas de maneira desorganizada ou incorreta, fica muito mais difícil fazer a manipulação destas informações.

Apesar da importância deste armazenamento de informações, o modo como o sistema persiste os dados deve ficar oculto para o usuário final, pois o que realmente interessa para o usuário são maneiras de fazer operações com a agenda e não conhecer a maneira como estes dados são armazenados e recuperados.

Gerenciamento de Memória

Há três áreas de memória onde as aplicações armazenam dados: global memory, heap e stack. Variáveis globais são armazenadas na memória global (global memory). Esta memória é reservada pela aplicação quando o programa inicia e permanece alocada até que o programa termine sua execução. A memória global é também chamada de data segment.

Quando declaramos uma variável dentro de um método, a memória requerida para armazenar tal variável é alocada numa área denominada Stack. Quando o programa sai do escopo do método, as alocações da Stack são liberadas automaticamente.

A memória Stack é alocada dinamicamente utilizando o conceito de pilha (LIFO – Last In First Out). Em Delphi, a memória Stack é utilizada para:

· Variáveis de rotinas locais (métodos, procedimentos e funções);

· Parâmetros de rotinas e tipos de retorno;

· Chamadas a funções da API do Windows;

· Records;

Não é necessário alocar nem liberar a memória Stack, pois este processo é feito automaticamente. O tamanho da memória Stack é, por padrão, grande o suficiente para os programas em Delphi, sendo assim, muito raramente este tamanho terá que ser alterado.

Nota: Para visualizar o tamanho da Stack, clique no menu Project – Options – Linking e note os campos Maximum Stack Size e Minimum Stack Size. Não recomenda-se que se mude estas configurações, pois isso pode acarretar problemas nas aplicações.

Variáveis locais não são inicializadas quando declaradas, portanto, uma boa prática é antes de utilizar sua variável, inicializá-la para que você não tenha que se deparar com um valor absurdo.

Devido à estrutura de pilha utilizada pela Stack, o acesso a esta memória é muito rápido, pois apenas algumas poucas operações são realizadas para armazenar e ler o valor de uma variável.

Temos ainda a memória Heap, ela é utilizada para:

· Criar uma instância de uma classe;

· Criar e redimensionar arrays dinâmicos;

· Alocar memória explicitamente, usando GetMem, FreeMem, New e Dispose;

· Utilizar Ansi/Wide/Unicode strings, variants e interfaces (gerenciados automaticamente pelo Delphi);

Os blocos de memória alocados na memória Heap não têm uma ordem lógica de acesso, ou seja, seu acesso é randômico. Por isso que operações realizadas na memória Heap são um pouco mais lentas s ...

Fim do trecho gratuito • continue abaixo
CONTEÚDO EXCLUSIVO

Desbloqueie toda a DevMedia

  • +2000 artigos e vídeos
  • +40 trilhas sobre Front-end, Back-end, IA e muito mais
  • +5000 exercícios práticos
  • Mentorias ao vivo individuais
até 50% OFF
A partir de
R$ 69 /mês
Assinar agora