没有循环时数组大小有问题吗?

Is there any issue with Array size when there isn't looping?

我在我的合同中使用了一个只存储地址的数组,没有任何循环, 将数据存储在数组中是否存在任何汽油费问题?或者这个存储有什么限制吗?

谢谢关注

我猜你说的是下面智能合约中的 'arr1' 这样的数组。这将把 arr1 存储在以太坊虚拟机的 'storage' 中——这将使用一些气体。请记住,任何计算或数据存储都会在 Solidity 中消耗一些 gas。在函数内部定义的数组 'arr2' 将使用更少的气体,但是因为它存储在 'memory'.

contract test {
    address[] arr1 = [0x778E08a594887B208d18a429cfD30d740e0fea71, 0xE8088D6c465Eaa58E123aa08623abaAFFBBBB55B];
    
    function arrayFunction() public pure{
        address[] memory arr2 = new address[](2);
        arr2[0] = 0x778E08a594887B208d18a429cfD30d740e0fea71;
        arr2[1] = 0xE8088D6c465Eaa58E123aa08623abaAFFBBBB55B;
    }
}

以太坊虚拟机 (EVM) 具有三个可以存储数据的区域:

  1. 存储 - 持久且使用昂贵。这些是在函数之外定义的。
  2. 内存 - 消耗一些 gas,但比存储变量要少得多。这些是函数内部的局部变量,例如数组、映射等。引用类型。
  3. 堆栈 - 成本与内存相同。这些是函数内部的局部变量,例如 int/uint 。不是引用类型。

要记住的重要一点是,存储在 'memory'/'stack' 中的变量总是比将变量存储在 'storage'.

中使用更少的 gas

我推荐的一个很好的资源是 EVM 中各种操作码的气体消耗。单击 here