W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
以太坊虛擬機具有三個可以存儲數(shù)據(jù)的區(qū)域:存儲、內(nèi)存和堆棧。
每個帳戶都有一個稱為storage的數(shù)據(jù)區(qū)域,它在函數(shù)調(diào)用和事務(wù)之間是持久的。存儲是將 256 位字映射到 256 位字的鍵值存儲。無法從合約中枚舉存儲,讀取成本相對較高,初始化和修改存儲的成本更高。由于這個成本,您應(yīng)該將存儲在持久存儲中的內(nèi)容最小化為合約需要運行的內(nèi)容。在合約之外存儲衍生計算、緩存和聚合等數(shù)據(jù)。合約既不能讀取也不能寫入除了自己的存儲之外的任何存儲。
第二個數(shù)據(jù)區(qū)域稱為內(nèi)存,其中合約為每個消息調(diào)用獲取一個新清除的實例。內(nèi)存是線性的,可以在字節(jié)級別尋址,但讀取的寬度限制為 256 位,而寫入的寬度可以是 8 位或 256 位。當(dāng)訪問(讀取或?qū)懭耄┮郧拔从|及的內(nèi)存字(即字內(nèi)的任何偏移量)時,內(nèi)存會擴展一個字(256 位)。擴張時,必須支付gas費用。內(nèi)存越大,它的成本就越高(它以二次方縮放)。
EVM 不是寄存器機,而是堆棧機,因此所有計算都在稱為堆棧的數(shù)據(jù)區(qū)域上執(zhí)行。它的最大大小為 1024 個元素并包含 256 位的字。通過以下方式對堆棧的訪問僅限于頂端:可以將最頂端的 16 個元素之一復(fù)制到堆棧的頂部,或者將最頂端的元素與它下面的 16 個元素之一交換。所有其他操作從堆棧中獲取最頂部的兩個(或一個或多個,取決于操作)元素并將結(jié)果壓入堆棧。當(dāng)然,可以將堆棧元素移動到存儲或內(nèi)存中,以便更深入地訪問堆棧,但在不首先移除堆棧頂部的情況下,不可能僅訪問堆棧中更深的任意元素。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: