Solidity
懷疑gas費用
考慮我必須處理 3 個 uint8 值,每個值都將為每個使用者儲存。如果我使用 3 個不同的數組或者如果我使用包含 3 個 uint8 值的結構數組,gas 成本是否相同。
struct Users{ uint8 no1; uint8 no2; uint8 no3; } Users[] public users;
謝謝
如果我使用 3 個不同的數組或者如果我使用包含 3 個 uint8 值的結構數組,gas 成本是否相同。
在您的範例中,這三個
uint8
將被打包成一個 32 字節的單詞。struct Users{ uint8 no1; uint8 no2; uint8 no3; }
注意數組:
Users[] public users;
所以,你有
users[0], users[1], users[2} ...
. 每個都會返回一個struct
恰好包含 3x 8-bit的單曲uint8
。如果我使用 3 個不同的數組
uint8[] no1; uint8[] no2; uint8[] no3;
要獲取或儲存 3,它看起來像:
uint8 a = no1[0]; uint8 b = n02[0]; uint8 c = no3[0];
每個
uint8
都是可單獨定址的,我們必須執行三個操作才能獲得所有三個。每個都使用一個完整的 32 字節字,因為這是可定址空間的最小單位。我們還必須分三步完成,而不是一步。因此,將有更多的操作來逐步完成它。到目前為止,最昂貴的操作將是寫入。第一種方法是使用 struct,將單個 SSTORE 準備到一個“槽”(5-20K 氣體)。分離陣列技術為三個插槽(15-60K 氣體)準備了三個 SSTORE 操作。
希望能幫助到你。