Skip to content

Armazenamentos de dados

Crazynds edited this page Jun 17, 2019 · 2 revisions

Tipos de armazenamentos de dados

Existem 2 tipos de armazenamento de dados, cada um com suas vantagens e desvantagens, sendo eles: Workspace (Memória de trabalho) e Memory (Memória de uso geral);

Memory

A memória de uso geral tem tamanho dinâmico, ou seja, pode se alterar durante a execução do programa. Cada contexto possui uma memória diferente que não se interferem. Por padrão, cada contexto começa com um espaço livre de 16KB de memória de uso geral. No uso das instruções, existem poucas que utilizam a memória para atividades complexas. Sempre que utilizado (Sem uso de JIT) é verificado se o espaço de memória está disponível, ocasionando perca de desempenho. A tamanho máximo que pode ser alocado para a memória de uso geral é de 281474976710655B ou 256TB. (Tamanho equivalente a uma variável de 48 bits, pois é armazenado em uma variável de 48 bits)

Exceção: No uso de JIT pode gerar exceções por invasão de memória acima do limite do contexto. As exceções são tratadas pelo Sistema Operacional e a Quartz VM será encerrada.

O tamanho de cada slot da memória de uso geral é de 8 bits, equivalente a memória do computador, porém caso haja um acesso de 32 bits, será acessado os slots [x,x+1,x+2,x+3] e assim entre todos os outro tipos. A memoria pode ser referenciado por memória estática, ponteiro simples ou ponteiro complexo:

  • Memória estática: Utiliza apenas um numero que aponta para o local da memória. (ptr(0x10) = Memória na posição 0x10)
  • Ponteiro simples: Se utiliza de um slot da workspace e uma constante opcional. (ptr(W[0]+0x04) = Memória na posição de acordo com a workspace[0] mais 0x04)
  • Ponteiro complexo: Se utiliza de um slot da workspace como base, um slot como index, e uma constante que multiplica por uma potencia de 2 o index mais um valor constante. (ptr(W[0]+W[1]<<0x01+0x10) = Memória na posição de acordo com a workspace[0] mais o valor da workspace[1] multiplicado por (1<<0x01) mais 0x10)

Workspace

A workspace é uma memoria de tamanho estático, ou seja, que não altera durante a execução da VM. Enquanto a memoria de uso geral é vinculada a um contexto, a workspace é vinculada a cada Thread, sendo impossível que outra Thread acesse a workspace uma da outra. Por padrão, cada workspace tem um tamanho de 2KB. Para a utilização das instruções, a maioria suportará o uso da Workspace, principalmente para atividades mais complexas. Sempre que é usado algum slot da workspace, não ocorre nenhuma verificação, pela workspace ter tamanho constante; isso faz da workspace mais rápida para a execução de instruções.

O tamanho de cada slots da workspace é de 64 bits, sendo assim, impossibilitando a invasão entre as memórias. Existe apenas um tipo de acesso a memoria workspace, o acesso estático:

  • Acesso estático: Acesso por um valor constante. (W(0) = Workspace no slot 0)
Clone this wiki locally