Solidity

懷疑gas費用

  • May 30, 2019

考慮我必須處理 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-20​​K 氣體)。分離陣列技術為三個插槽(15-60K 氣體)準備了三個 SSTORE 操作。

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/71267