Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Solidity允许在结构内映射类型。这样一个字段需要多少字节?
具体来说,我想优化以下类型的存储布局。
struct Balance { uint40 amount; mapping(address => uint) allowances; }
我认为您的意思是存储布局,而不是内存布局。
uintuint256是256 位的别名。因此,该映射中存储的每个值都使用一个 32 字节的存储槽。
uint
uint256
编辑
对于完整的Balance结构,每个将消耗两个存储槽,但一个槽将始终为零。第一个插槽由 消耗,第二个是实际没有存储任何值uint40的占位符。mapping就gas费用而言,这是免费的。
Balance
uint40
mapping
因此,存储一个新的Balance会将一个 32 字节的字写入存储,然后uint您添加到allowances映射中的每个字都会将一个 32 字节的字写入存储。
allowances