Solidity
此程式碼的氣體使用量是否為 O(1)?
無論映射/數組大小如何(假設非零數組條目),此函式的氣體使用量是否恆定?
items
是一個數組,並且presence
是一個映射function clear() public { for (uint i = 0; i < items.length; i++) { presence[items[i]] = 0; } delete items; }
也就是說,刪除數據的gas返還是否大於迭代查詢數據時消耗的gas?
這個函式是這個 Set 實現的一個片段。
快速分析表明,函式呼叫 gas 使用量不是 O(1),也不接近 O(1)。超過 2 個項目後,每增加一個項目,gas 使用量就會開始上升。
這是用於清除不同數量項目的氣體使用表(使用https://remix.ethereum.org測試):