como funciona o layout da memória?
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
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)
}
}