映射类型的 Solidity 字段大小
Solidity field size of mapping type
Solidity allows 结构内的映射类型。这样一个字段需要多少字节?
具体来说,我想优化以下类型的storage layout。
struct Balance {
uint40 amount;
mapping(address => uint) allowances;
}
我认为你的意思是存储布局,而不是内存布局。
uint
是 uint256
的别名,它是 256 位。因此存储在该映射中的每个值都使用存储中的一个 32 字节槽。
编辑
对于完整的 Balance
结构,每个结构将占用两个存储槽,但一个槽始终为零。第一个槽由 uint40
使用,第二个槽是 mapping
的占位符,实际上没有存储任何值。就 gas 成本而言,这是免费的。
所以存储一个新的 Balance
将写入一个 32 字节的字到存储,然后每个 uint
你添加到 allowances
映射将写入一个 32 字节的字到存储。
Solidity allows 结构内的映射类型。这样一个字段需要多少字节?
具体来说,我想优化以下类型的storage layout。
struct Balance {
uint40 amount;
mapping(address => uint) allowances;
}
我认为你的意思是存储布局,而不是内存布局。
uint
是 uint256
的别名,它是 256 位。因此存储在该映射中的每个值都使用存储中的一个 32 字节槽。
编辑
对于完整的 Balance
结构,每个结构将占用两个存储槽,但一个槽始终为零。第一个槽由 uint40
使用,第二个槽是 mapping
的占位符,实际上没有存储任何值。就 gas 成本而言,这是免费的。
所以存储一个新的 Balance
将写入一个 32 字节的字到存储,然后每个 uint
你添加到 allowances
映射将写入一个 32 字节的字到存储。