[Tutorial] Alinhamento de variáveis |
Hydroper « Citoyen » 1499300880000
| 3 | ||
Alinhamento Estou supondo que "alinhamento" se refere à uma exposição direta de variáveis. Enfim, como seria isso? Vamos supor que temos uma classe Element assim:
Varíavel type (de instância) Varíavel html (de instância) Varíavel children (de instância) Variável parent (de instância) Uma instância dessa classe tem um tamanho de 4 valores, que são das variáveis type, html, children e parent. Para representar a instância basta despejar 4 valores equivalentes à cada variável numa tabela. Exemplo de implementação: Code Lua 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 local NULL = false; Foi usado NULL = false no lugar de nil para que não quebrasse a sequência, ou seja, 4 valores armazenados consecutivamente — "campos", mas otimizáveis. Uma alternativa do NULL para variáveis com booleans seria local SAFE_NULL = {};. Adicionalmente, podemos guardar as índices das variáveis para facilitar a leitura do código, por exemplo: Code Lua 1 2 3 4 5 6 local var_Element_type = 1; Nem sempre é necessário armazenar todas variáveis. Para isso é preciso de uma informação extra. Gerenciamento de memória manual O coletor de lixo de Lua envolve na remoção de tabelas. No "Mark and Sweep", quanto mais tabelas tem, mais o coletor de lixo fica próximo de fazer sua próxima limpeza, para disponibilizar memória. Para previnir isso basta armazenar e rastrear blocos de valores em sequências fixas. Sugestões: heap, onde recursos (instâncias de classes e variáveis) são liberados manualmente; stack: onde recursos são automaticamente liberados no fim de um escopo. Infelizmente ainda não tenho exemplos. Seria eficiente uma implementação próxima de array de bytes para rastrear memórias. Dernière modification le 1501420320000 |
Squalleze « Citoyen » 1499716260000
| 1 | ||
Não sabia q havia perda de desempenho ao utilizar outros tipos de valores como chave, isso é só do LuaJ ou do Lua em geral? |
Hydroper « Citoyen » 1499720100000
| 0 | ||
Squalleze a dit : A perda não é tão significante, mas tabelas com uma sequência apenas estão garantidas de serem sempre eficientes contra dicionários. Dernière modification le 1501418760000 |