我正在开发Dapp。
我的问题是,就天然气经济而言,
bool[] a = new bool[](16);
和
uint16 a = 0;
两者的汽油费相同吗?
数组的大小将保持不变。
bool[] a = new bool[](16);
存储固定大小阵列的初始化会创建指向N+1个存储插槽的指针,其中N是阵列长度。存储在第一个槽中的值是数组长度(在您的情况下是16(,其余的是其项的值。
在这种情况下(不使用struct
s(,没有与数据类型长度相关的优化。因此,即使是bool
也会占用整个(32字节(插槽。
uint16 a = 0;
初始化存储整数会创建一个仅指向1个存储插槽的指针。
您也可以不使用0
值的冗余分配来保存一个写入操作,因为0
无论如何都是默认值。所以你可以用uint16 a;
代替uint16 a = 0;
因此,简而言之,与初始化阵列相比,初始化uint
(不分配零值(要便宜17倍。