首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

表结构

让我们看看我们的第一个复杂数据类型,一个包含6个字段的结构:

pragma solidity ^0.4.11;

contract C {

structTuple {

uint256 a;

uint256 b;

uint256 c;

uint256 d;

uint256 e;

uint256 f;

}

Tuple t;

function C() {

t.f =0xC0FEFE;

}

}

存储中的布局与状态变量相同:

字段t.a位于0x0

字段t.b位于0x1

等等…

像以前一样,我们可以直接写入t.f而无需支付初始化费用。

我们编译:

$ solc --bin --asm --optimize c-struct-fields.sol

我们看到完全相同的组件:

tag_2:

0xc0fefe

0x5

sstore

固定长度数组

现在让我们声明一个固定长度的数组:

pragma solidity ^0.4.11;

contract C {

uint256[6] numbers;

function C() {

numbers[5] =0xC0FEFE;

}

}

由于编译器确切地知道有多少uint256(32字节),它可以简单地在存储中一个接一个地布置数组的元素,就像它对存储变量和结构一样。

在这份合同中,我们再次存储到位置0x5。

编译:

$ solc --bin --asm --optimize c-static-array.sol

集合

tag_2:

0xc0fefe

0x0

0x5

tag_4:

add

0x0

tag_5:

pop

sstore

它字节稍微长点,但你可以简化一下,你会发现实际上都是一样的。 让我们手动进一步优化:

tag_2:

0xc0fefe

// 0+5. Replace with 0x5

0x0

0x5

add

// Push then pop immediately. Useless, just remove.

0x0

pop

sstore

删除标签和伪指令,我们再次得到相同的字节码序列:

tag_2:

0xc0fefe

0x5

sstore

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券