在智能合約開發中,動態數組通常會消耗較多的 gas,而使用定長數組可以有效降低 gas 成本。
動態數組的賦值需要進行複製,刪除操作需要移位,這些都會增加 gas 消耗。例如:
uint[] public arr;
function f() public {
for(uint i = 0; i < 100; i++) {
arr.push(i);
}
}
相比之下,定長數組長度固定,賦值直接通過索引修改,刪除值後不需要移位。例如:
uint[100] public arr;
function f() public {
for(uint i = 0; i < 100; i++) {
arr[i] = i;
}
}
因此,在長度已知或者上限可預估的情況下,使用定長數組可以減少 gas 消耗。需要注意的是,定長數組不能增加長度,如果預計可能需要擴容,仍需使用動態數組。
在智能合約優化中使用定長數組可以明顯減少 gas 成本,但需要考量業務場景是否真的需要固定長度,靈活運用動態數組和定長數組的優劣可以實現最優的 gas 使用效果。