Solidity
高效的結構排序以減少氣體
與以特定順序初始化狀態變數以節省氣體不同,這是否也適用於您聲明結構屬性的方式,其中您將較低
uint
的 s 並排放置?// State arranged to save gas contract Foobar { uint8 foo; uint8 bar; uint16 baz; uint num; } // Does the same concept apply to a struct as well? struct Item { uint8 foo; uint8 bar; uint16 baz; uint num; }
或者你可以在結構中瘋狂並以任何順序輸入它嗎?
如果您指的是儲存在其中的結構,那麼是的,適用的規則與文件
storage
中描述的規則完全相同:
- 儲存槽中的第一項儲存低位對齊。
- 值類型只使用儲存它們所需的字節數。
- 如果值類型不適合儲存槽的剩餘部分,則將其儲存在下一個儲存槽中。
- 結構體和數組數據總是開始一個新的槽,並且它們的項目根據這些規則被緊緊地打包。
- 結構或數組數據之後的項目總是開始一個新的儲存槽。
然而,在記憶體中,每個元素都儲存在 32 個字節上,除了
bytes
和string
你可以在這裡看到。