Solidity: bool[](16) vs uint16



我正在开发Dapp。

我的问题是,就天然气经济而言,

bool[] a = new bool[](16);

uint16 a = 0;

两者的汽油费相同吗?

数组的大小将保持不变。

bool[] a = new bool[](16);

存储固定大小阵列的初始化会创建指向N+1个存储插槽的指针,其中N是阵列长度。存储在第一个槽中的值是数组长度(在您的情况下是16(,其余的是其项的值。

在这种情况下(不使用structs(,没有与数据类型长度相关的优化。因此,即使是bool也会占用整个(32字节(插槽。


uint16 a = 0;

初始化存储整数会创建一个仅指向1个存储插槽的指针。

您也可以不使用0值的冗余分配来保存一个写入操作,因为0无论如何都是默认值。所以你可以用uint16 a;代替uint16 a = 0;


因此,简而言之,与初始化阵列相比,初始化uint(不分配零值(要便宜17倍。

最新更新