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