区块链研究实验室-深入了解Solidity如何在以太坊上运行-第四节

在本系列的第一篇文章中,我们深入研究了一个简单的Solidity的汇编代码:

contract C {

uint256 a;

function C() {

a =1;

}

}

该合同归结为调用sstore指令:

// a = 1

sstore(0x0,0x1)

EVM将值0x1存储在存储位置0x0中,每个存储位置可以精确存储32个字节(或256位)。

在本文中,我们将开始研究Solidity如何使用32字节的块来表示更复杂的数据类型,如结构和数组。 我们还将了解如何优化存储以及如何优化。

在典型的编程语言中,理解数据类型如何在如此低的水平上表示并不是非常有用。 在Solidity(或任何EVM语言)中,这种知识至关重要,因为存储访问非常昂贵:

sstore的成本为20000,比基本算术指令贵约5000倍。

sload需要200gas,比基本算术指令贵100倍。

而通过“成本”,不仅是毫秒的性能,运行和使用合同的成本很可能都由sstore和sload主导!

构建通用计算机需要两个基本要素:

一种循环方式,可以是跳转也可以是递归。

无限量存储

EVM汇编代码,EVM存储器提供无限内存。模拟一个运行以太坊版本的环境;

合同的EVM存储就像一个无限的自动收报机磁带,磁带的每个插槽都有32个字节,例如:

[32bytes][32bytes][32bytes]...

我们将看到数据如何存在于无限磁带上。

磁带的长度为2²⁵⁶方或每个合约约10⁷⁷方个存储槽, 可观察的粒子数为10⁸⁰方。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180808A08KZ400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券