0

Solidity允许在结构内映射类型。这样一个字段需要多少字节?

具体来说,我想优化以下类型的存储布局

struct Balance {
    uint40 amount;
    mapping(address => uint) allowances;
}
4

1 回答 1

2

我认为您的意思是存储布局,而不是内存布局。

uintuint256是256 位的别名。因此,该映射中存储的每个值都使用一个 32 字节的存储槽。

编辑

对于完整的Balance结构,每个将消耗两个存储槽,但一个槽将始终为零。第一个插槽由 消耗,第二个是实际没有存储任何值uint40的占位符。mapping就gas费用而言,这是免费的。

因此,存储一个新的Balance会将一个 32 字节的字写入存储,然后uint您添加到allowances映射中的每个字都会将一个 32 字节的字写入存储。

于 2018-06-23T19:11:43.597 回答