1、节约燃料
- 1、uint压缩字节来减少gas,但是在struct 结构体中才有意义
如果直接在合约中定义,反而会消耗更多的gas,因为以太坊cpu每次读取是以32个字节(256位)为最小单位;
在结构体中之所以会节约gas,是因为结构体会压缩结构体中的数据到storage 的 slot中。
2、结构体字节对齐
结构体中uint类型定义的时候,同种类型的要挨在一起,并且是按照大小顺序排列;
原因还是上面的,结构体会压缩结构体中的数据到storage 的 slot中,压缩的时候,同种类型的会紧密的压缩放在一起3、哈希表替换动态长度数组
solidity中mapping,其实并不存储keys,只存储value,value是通过key hash 索引来找到的,所以 mapping并没有直接的获取keys 或者values方法(java 中Map 就有),但是以太坊基金会为我们提供了以uint为例子的遍历mapping的库https://github.com/ethereum/dapp-bin/blob/master/library/iterable_mapping.sol
可以看出,从mapping中获取value数据时,效率要比从数组中获取更加快速(数组需要遍历),从而节约gas
- 4、view pure
特别是在通过for循环获取需要的数据的操作,可以节省大量的gas