11.DataLocation
11.DataLocation
Solidity中的数组存储位置有三种:
storage: 存储在链上,合约中的状态变量默认都是storagememory: 存储在内存中,不上链函数参数和临时变量一般都是memory。calldata: 和memory类似,存储在内存中,不上链,不同的是calldata不能修改,一般用于函数的参数。
不同的存储位置他们的Gas成本不同。
Todo
Dive It
Memory
在Solidity中内存是线性的。内存中每个字节都可以通过索引来直接访问。内存中每个字都是连续的32个字节,与slot的大小相同,并且字是一个接一个的沿着直线排列的,solidity保留四个32位字节槽来供内部使用.
位于内存中的变量只能在定义它们的函数范围内访问(通过 Solidity)。
请记住,内存永远不会被释放,因此可以通过简单地从分配它的内存位置读取变量来访问(即通过内联汇编)

Calldata
stroage
refer
https://blog.smlxl.io/solc-internals-part-2-data-locations-2f6517aeb154