Solidity
組裝:擴展儲存陣列長度
是否可以直接在 Assembly 中“擴展”數組長度?
理想情況下,這將用等效的“”值填充新
0
值。例子:
address[] internal owners; function mint(to, amount) { owners.push(to); assembly { // owners.length += amount - 1... :-S } }
我試圖避免/優化這一點:
function mint(to, amount) { owners.push(to); for (uint256 i; i < amount - 1; i++) { owners.push(address(0)); } }
是否可以直接在 Assembly 中“擴展”數組長度?
是的,您需要增加位於數組儲存槽的數組的長度:
function mint(to, amount) { owners.push(to); assembly { sstore(owners.slot, add(sload(owners.slot), sub(amount, 1))) } }
假設映射或數組的儲存位置在應用儲存佈局規則後最終成為插槽 p。對於動態數組,此槽儲存數組中元素的數量(字節數組和字元串除外,見下文)。
然後預設情況下,數組中項目的值已設置為 0x0000…000 等。