Angenommen, ich deklariere eine Zuordnung, die uint256-Zahlen als Schlüssel verwendet und sie einem einzelnen 8-Bit-Zeichen zuordnet. Ich füge dieser Zuordnung 5 Mitglieder hinzu.
Offensichtlich kann ich dann auf jedes dieser 5 Zeichen zugreifen, indem ich ihre jeweiligen Indizes verwende.
Was ich also wissen möchte, ist, verbraucht diese Zuordnung 5 * 8 = 40 Bit Speicher oder 5 * 8 + 5 * 256 = 1320 Bit?
Ein Mapping ist ein dynamischer Typ, der als Speicher- (nicht Arbeitsspeicher-) Schlüsselwertdatenbank fungiert
Nehmen wir das folgende Beispiel
contract C {
mapping(uint256 => uint256) items;
function C() {
items[0xC0FEFE] = 0x42;
}
}
Der Assemblercode für die C-Funktion enthält:
// Storing 0x42 to the address 0x798...187c
0x42
0x79826054ee948a209ff4a6c9064d7398508d2c1909a392f899d301c6d232187c
sstore
Das heißt, wir speichern den Wert 0x42
in dem Wert, der dem Schlüssel entspricht, 0x79826054ee948a209ff4a6c9064d7398508d2c1909a392f899d301c6d232187c
der der Hash des Zuordnungsschlüssels ist0xC0FEFE
Hier ist eine interessante Diskussion darüber, warum Zuordnungen nicht für die Speichernutzung entworfen werden können. Warum (konzeptionell) können Zuordnungen keine lokalen Variablen sein?
Sc4R
Badr Bellaj
Ismael
Badr Bellaj