Ferramentas do usuário

Ferramentas do site


prog2:alocacao_dinamica_de_matrizes

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
prog2:alocacao_dinamica_de_matrizes [2019/04/16 14:27]
maziero [Método 4: área única com vetor de ponteiros e linhas contíguas]
prog2:alocacao_dinamica_de_matrizes [2019/10/15 16:45] (atual)
maziero
Linha 13: Linha 13:
 Por outro lado, matrizes **dinâmicas** não são tão simples de alocar e usar. Esta página visa mostrar alguns exemplos de como fazê-lo. Por outro lado, matrizes **dinâmicas** não são tão simples de alocar e usar. Esta página visa mostrar alguns exemplos de como fazê-lo.
  
-Nas figuras a seguir, cada faixa de blocos de uma mesma cor representa uma linha da matriz.+Nas figuras a seguir, cada faixa de blocos de uma **mesma cor** representa uma linha da matriz.
  
 ===== Método 1: alocação única ===== ===== Método 1: alocação única =====
Linha 19: Linha 19:
 Neste método, os elementos da matriz são alocados em um único vetor, linearmente. Os elementos da matriz são acessados explicitamente através de aritmética de ponteiros. Neste método, os elementos da matriz são alocados em um único vetor, linearmente. Os elementos da matriz são acessados explicitamente através de aritmética de ponteiros.
  
-{{matriz-unica.png |}}+{{  matriz-unica.png |}}
  
 <code c> <code c>
Linha 39: Linha 39:
 free (mat) ; free (mat) ;
 </​code>​ </​code>​
 +
 +Apesar do acesso às posições da matriz ser menos intuitivo, esta abordagem é muito rápida no acesso à memória, pois todos os elementos da matriz estarão alocados em posições contíguas de memória, devido à sua boa [[https://​en.wikipedia.org/​wiki/​Locality_of_reference|localidade de referências]].
  
 ===== Método 2: vetor de ponteiros de linhas separadas ====== ===== Método 2: vetor de ponteiros de linhas separadas ======
Linha 44: Linha 46:
 Neste método, a matriz é vista e alocada como um vetor de ponteiros para linhas, que são vetores de elementos. O vetor de ponteiros de linhas e os vetores de cada linha devem ser alocados separadamente. Neste método, a matriz é vista e alocada como um vetor de ponteiros para linhas, que são vetores de elementos. O vetor de ponteiros de linhas e os vetores de cada linha devem ser alocados separadamente.
  
-A vantagem desta técnica é que o acesso aos elementos da matriz usa a mesma sintaxe do acesso a uma matriz estática, o que torna a programação mais simples.+A vantagem desta técnica é que o acesso aos elementos da matriz usa a mesma sintaxe do acesso a uma matriz estática, o que torna a programação mais simples. Entretanto, sua localidade de referências é pior que na abordagem anterior.
  
-{{ matriz-linhas-separadas.png |}}+{{  matriz-linhas-separadas.png |}}
  
 <code c> <code c>
Linha 79: Linha 81:
 Além de usar a mesma sintaxe do acesso que o método anterior uma matriz estática, esta abordagem tem mais duas vantagens: somente precisa de duas operações de alocação de memória e todos os elementos da matriz estão alocados sequencialmente na memória, o que facilita operações de cópia de matrizes (usando ''​memcpy''​) ou de leitura/​escrita da matriz para um arquivo (usando ''​fread''​ ou ''​fwrite''​). Além de usar a mesma sintaxe do acesso que o método anterior uma matriz estática, esta abordagem tem mais duas vantagens: somente precisa de duas operações de alocação de memória e todos os elementos da matriz estão alocados sequencialmente na memória, o que facilita operações de cópia de matrizes (usando ''​memcpy''​) ou de leitura/​escrita da matriz para um arquivo (usando ''​fread''​ ou ''​fwrite''​).
  
-{{matriz-linhas-contiguas.png |}}+{{  matriz-linhas-contiguas.png |}}
  
 <code c> <code c>
Linha 112: Linha 114:
 O método anterior pode ser modificado, juntando os ponteiros e as linhas da matriz em uma única área de memória: O método anterior pode ser modificado, juntando os ponteiros e as linhas da matriz em uma única área de memória:
  
-{{matriz-unica-2.png |}}+{{  matriz-unica-2.png |}}
  
 <code c> <code c>
Linha 140: Linha 142:
 </​code>​ </​code>​
  
-<note important>​ 
 Apesar de ser elegante, esta solução pode apresentar um desempenho fraco, devido a problemas de alinhamento da matriz no cache da memória RAM. Apesar de ser elegante, esta solução pode apresentar um desempenho fraco, devido a problemas de alinhamento da matriz no cache da memória RAM.
-</​note>​ 
  
 ===== Exercícios ===== ===== Exercícios =====
prog2/alocacao_dinamica_de_matrizes.1555435670.txt.gz · Última modificação: 2019/04/16 14:27 por maziero