como funciona o layout da memória?

Oct 02 2020

Estou tentando entender como https://solidity.readthedocs.io/en/v0.7.2/internals/layout_in_memory.html trabalho.

function test(uint a) public {
   uint test1 = 20; 
   uint[1] testArr;
   testArr[0] = 20;
}

Pergunta 1) onde test1está armazenado? Eu vi o artigo que afirma que todas as variáveis ​​locais são armazenadas na memória e não na pilha. isso está correto?

Questão 2) você poderia escrever um código assembly mloadsobre como obter test1 e testArr [0] da memória, pois não entendo como a solidez explica o layout da memória. Eu realmente aprecio isso.

Respostas

1 Ismael Oct 02 2020 at 21:33

O artigo está errado. Tipos de valor como bool, uintXXX, bytesYY, etc. são armazenados na pilha, para tipos dinâmicos você é forçado a escolher memória ou armazenamento.

Para ler os dados do array apenas carregue o endereço. Matrizes de dados de tamanho fixo contêm apenas os dados, não armazenam o comprimento no início como matrizes dinâmicas.

function test() public view returns (uint r) {
   uint[1] memory testArr;
   testArr[0] = 20;
   assembly {
       r := mload(testArr)
   }
}