23-02-26
First Post:
Last Update:
Last Update:
2023-02-26
calldata与memory的区别
在 Solidity 中,参数可以被声明为 calldata 或 memory。
calldata 表示参数值在调用函数时不会被修改,而是被传递到函数中。在函数内部,它们可以被视为常量,不能被修改。当函数调用结束时,这些值也将被销毁。在视觉上, calldata 参数类似于函数签名中的参数。
memory 表示参数值在调用函数时可以被修改,并且在函数调用结束后将保留修改后的值。在函数内部, memory 用于存储临时变量和复制的值,例如在函数内部创建的新数组或结构体。在函数结束后,调用方可以通过返回值或事件查看修改后的值。
在传递大量数据时,使用 calldata 通常比使用 memory 更高效,因为它不需要在函数调用中复制大量数据。但是,如果需要对传递的数据进行修改,则必须使用 memory。
元组 Tuple
在solidity中经常看到返回值是元组的,记录一下(函数哪里会有更详细用法)
1 | pragma solidity ^0.8.17; |
比较memory跟storage类型数据的string
1 | if (keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b))) { |