Storage, memory og stack
EVM-dataplaceringer
Storage, memory og stack er en gratis Grundlæggende udvikling af Web3- og DApp-programmer-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Grundlæggende udvikling af Web3- og DApp-programmer, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Grundlæggende udvikling af Web3- og DApp-programmer-kurset indeholder 4 lektioner i alt.
Hvor data ligger i EVM
EVM har flere forskellige steder, hvor data kan gemmes, hver med forskellige omkostninger og levetider.
De tre centrale dataplaceringer er stacken, hukommelsen og lageret. Det er afgørende at vælge den rigtige for at skrive effektive kontrakter.
Stacken
Stacken er EVM's arbejdsområde til beregninger. Den kan indeholde op til 1024 værdier på hver 256 bit.
Opkoder lægger værdier øverst på stacken og fjerner dem derfra. Den er ekstremt billig, men lille og midlertidig.
PUSH1 0x02 // [2]
PUSH1 0x04 // [2, 4]
MUL // [8]
// stack vanishes when the call endsHukommelse
Hukommelse er et midlertidigt, lineært bytearray, der kun eksisterer under ét transaktionskald.
Den bruges til ting, der er for store til stacken, f.eks. når en streng eller et array opbygges. Den nulstilles, når kaldet afsluttes.
memory[0x00..0x20] = some value
// readable/writable during the call
// erased after execution endsLager
Lageret er kontraktens permanente tilstand, som gemmes på blockchainen mellem transaktioner.
Det er et nøgle-værdi-lager, der knytter slots på 256 bit til værdier på 256 bit. Tilstandsvariabler i en kontrakt ligger her.
storage slot 0 -> owner address
storage slot 1 -> total supply
storage slot 2 -> paused flag
// persists forever on-chainSammenligning af omkostninger
Omkostningerne stiger kraftigt afhængigt af placeringen:
- Stack — billigst, nogle få gas pr. operation
- Hukommelse — billig, vokser med størrelsen
- Lager — meget dyrt, især ved de første skrivninger
Hvorfor lager er dyrt
Skrivninger til lageret er dyre, fordi hver node skal gemme dem permanent. En ny lagerskrivning (SSTORE) kan koste 20000 gas.
Derfor begrænser udviklere antallet af skrivninger til lageret og foretrækker hukommelse til midlertidigt arbejde.
Lagerslots og pakning
Lageret er organiseret i slots på 32 bytes. Mindre variabler kan pakkes i ét slot for at spare gas.
To værdier af typen uint128 kan f.eks. være i det samme slot på 256 bit.
slot 0: [ uint128 a | uint128 b ]
// two values packed into one slot
// saves a storage slot = saves gasCalldata
En fjerde placering, calldata, indeholder de skrivebeskyttede inputdata fra en transaktion eller et kald.
Det er det billigste sted at læse funktionsargumenter fra, og dataene kan ikke ændres. Derfor er det ideelt til input, som du kun skal læse.
Vælg den rigtige placering
Tommelfingerregler:
- Brug stacken til kortvarige beregninger
- Brug hukommelse til midlertidige strukturer
- Brug kun lageret til data, der skal bevares
- Brug calldata til skrivebeskyttede input
Opsummering af levetider
Hver placering har sin egen levetid:
- Stack og hukommelse — forsvinder, når kaldet afsluttes
- Lager — bevares permanent på blockchainen
- Calldata — eksisterer, så længe kaldet varer, og er skrivebeskyttet
Sæt det hele sammen
EVM opdeler data i stack, hukommelse, lager og calldata, omtrent sorteret fra billigst og kortest levetid til dyrest og permanent.
Kloge udviklere begrænser permanente skrivninger til lageret mest muligt.
Hurtigt tjek
Test din viden om dataplaceringer i EVM.
Opsummering: Lager, hukommelse, stack
Du har lært, at:
- Stacken er billig, lille og midlertidig
- Hukommelse er midlertidigt arbejdsområde for et kald
- Lageret er permanent, men dyrt
- Calldata er billigt, skrivebeskyttet input
Næste emne: opkoder i detaljer.
Lær Grundlæggende udvikling af Web3- og DApp-programmer med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 29
- Lektioner
- 105
Ofte stillede spørgsmål
Er lektionen “Storage, memory og stack” gratis?
Ja — alle 3 lektioner i læringssporet Grundlæggende udvikling af Web3- og DApp-programmer, inklusive “Storage, memory og stack”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Grundlæggende udvikling af Web3- og DApp-programmer-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Storage, memory og stack”?
EVM-dataplaceringer Du øver dig i Grundlæggende udvikling af Web3- og DApp-programmer med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Grundlæggende udvikling af Web3- og DApp-programmer?
Der kræves ingen tidligere erfaring. Grundlæggende udvikling af Web3- og DApp-programmer på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Storage, memory og stack”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Grundlæggende udvikling af Web3- og DApp-programmer-lektion?
Ja. Alle Grundlæggende udvikling af Web3- og DApp-programmer-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Ethereum Virtual Machine
- Storage, memory og stack
- Opcodes
- Konti og state