Wenn Sie beispielsweise eine große ganze Zahl auf eine ganze Zahl abbilden,
uint[] index;
index.length = 1000000;
index[600001] = 4;
ist es billiger zu verwenden
mapping(uint => uint) index;
index[600001] = 4;
? Ein Vorteil der Verwendung uint[]
ist, dass es gelöscht werden kann, was in einer dApp, an der ich arbeite, nützlich ist.
Sie wären die gleichen, mit einer Modifikation.
Du würdest gehen
uint[1000000] index;
// index.length = 1000000; not needed
Der von Ihnen verwendete dynamische Index ist nur geringfügig teurer als das vorgeschlagene Array mit fester Länge, da er ein weiteres 32-Byte-Wort für die Arraylänge und den zusätzlichen Schritt zum Festlegen benötigt.
Beide Methoden verwenden einen 32-Byte-Schlüssel, um auf ein 32-Byte-Wort zu zeigen. Beide Methoden vermeiden unnötiges Schreiben, und die Werte in Indizes, in die nicht geschrieben wurde, sind standardmäßig 0.
Keine Methode profitiert davon, die Genauigkeit der Werte zu reduzieren, auf die gezeigt wird (z. B. auf uint8
), da ein 32-Byte-Wort der kleinste Speicherplatz ist, den sie adressieren können.
Ich hoffe es hilft.
et4erex
Rob Hitchens