Memória - Lucas-S-T/LittleLanguage GitHub Wiki

Memória

Nesse tópico você poderá entender melhor o funcionamento da Memória em LittleLanguage.

Alocação de memória

Sempre que uma instrução de alocação de memória for chamada, um novo objeto Memória será criado dentro da Máquina Virtual. Uma memória alocada nada mais é que um vetor de bytes. Não há definição de tipo primitivo em uma memória alocada, é de sua responsabilidade executar as operações corretas.

Quando alocada, a memória poderá conter qualquer valor em seu conteúdo, conhecido também como lixo de memória, você pode fazer um loop para limpá-la ou definir a flag "Clean Allocation" em sua Máquina Virtual, veja mais na seção VM Flags.

Operações Lógicas/Aritméticas

Existem diferentes instruções para diferentes tipos primitivos(Int, Long, Char etc), essas instruções irão considerar o objeto primitivo como os primeiros bytes do vetor de conteúdo da memória para efetuar sua operação.

Exemplo:

Considere o código abaixo:

.ALC a 5 ; Aloca 5 bytes em a
.LIC a 8 ; Salva a constante int(4 bytes) 8 em a

No final da execução desse código, nosso vetor de conteúdo da memória a será esse:

0x00 00 00 08 00

Inicialmente foi alocado 5 bytes, em seguida, a função Load Int Const foi chamada, a Máquina Virtual interpretou essa memória como um inteiro de 4 bytes, sendo assim, apenas os primeiros 4 bytes do vetor de conteúdo foram utilizados nessa operação.

Tenha em mente que os bytes não necessáriamente estarão nessa ordem, isso ira depender da Endianness de seu computador. Cuidado ao manipular os bytes de forma "crua" utilize sempre as instruções recomendadas.