Arrays dinâmicos
Dados do artigo
Capacidade do Array
A capacidade do array é o espaço livre disponível que foi alocado por ele. Quando este espaço é totalmente preenchido o array se expande dinâmicamente realocando memória. A capacidade inicial e em quanto ele irá se expandir são definidos pela granularidade do array que é definida durante a sua construção.
Nota: A granularidade precisa ser informada com muita cautela, caso seja um valor muito baixo e o array precise fazer várias re-alocações iremos ter um overhead, por outro lado se esta for muito alta ocorrerá um disperdício de espaço.
Tipos de buffer:
Arrays utilizam dois tipos de buffers, estes buffersé que determinam como a memória será alocada e re-alocada.
Flat Heap: Neste tipo de buffer os dados são armazenados em uma única célula heap(Heap Cell). Quando ouver a necessidade de re-alocar memória será utilizada uma nova célula com tamanho suficiente para armazenar os dados da antiga célula e os novos dados. Isto causa um certo overheadneste processo de cópia. Este tipo de bufferé indicado quando a aplicação não necessita realizar constantes realocações.
Segmented Buffer: Neste buffer os dados são armazenados em pequenos segmentos (cada um representa uma célula da memória de tamanho fixo) e é utilizado uma lista encadeada para fazer a ligação entre estes segmentos. O acesso aos dados é menos eficiente em comparação à Flat heap (é necessário percorrer a lista), porém a inserção e deleção conseguem ser mais eficiente (já que não existe a necessidade de se realizar cópia dos dados). Tipos de array:
Tamanho dos objetos:
Estas informações são referentes a quais objetos o array pode armazenar. Esta nomemclatura é utilizada no nome da classe assim você pode saber como é o seu funcionamento.
Fix: objetos de tamanhos fixos. '
Var: Objetos possuem tamanho variados.
Classes utilizadas para implementar arrays dinâmicos:
RArray - Array para objetos de tamanho fixo. Utiliza flat heap para armazena-los.
RPointerArray - Array que utiliza flat heap para armazenar ponteiros para objetos.
CArrayFixFlat - Array para objetos de tamanho fixo. Utiliza flat heap para armazena-los.
CArrayVarFlat - Array para objetos de tamanho variável. Utiliza flat heap para armazená-los.
CArrayPtrFlat - Array que utiliza flat heap para armazenar ponteiros para objetos.
CArrayPakFlat - CArrayFixSeg - Array para objetos de tamanho fixo. Armazena estes objetos em segmentos.
CArrayVarSeg - Array para objetos de tamanho variavel. Armazena estes objetos em segmentos.
CArrayPtrSeg - Array que utiliza segmentos para armazenar ponteiros para objetos.

