Digamos que declaro una asignación que usa números uint256 como claves y los asigna a un solo carácter de 8 bits. Agrego 5 miembros a este mapeo.
Obviamente, puedo acceder a cualquiera de estos 5 caracteres utilizando sus respectivos índices.
Entonces, lo que quiero saber es si esta asignación consume 5*8 = 40 bits de memoria o 5*8 + 5*256 = 1320 bits.
Una asignación es de tipo dinámico y funciona como una base de datos de clave-valor de almacenamiento (no de memoria).
tomemos el siguiente ejemplo
contract C {
mapping(uint256 => uint256) items;
function C() {
items[0xC0FEFE] = 0x42;
}
}
El código ensamblador para la función C contendrá:
// Storing 0x42 to the address 0x798...187c
0x42
0x79826054ee948a209ff4a6c9064d7398508d2c1909a392f899d301c6d232187c
sstore
lo que significa que almacenamos el valor 0x42
en el valor correspondiente a la clave 0x79826054ee948a209ff4a6c9064d7398508d2c1909a392f899d301c6d232187c
que es el hash de la clave de mapeo0xC0FEFE
Aquí hay una discusión interesante sobre por qué la asignación no se puede diseñar para el uso de la memoria. ¿ Por qué (conceptualmente) las asignaciones no pueden ser variables locales?
Sc4R
Badr Bellaj
ismael
Badr Bellaj