抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

前言

当我们想用数组存储一些数据的时候,如果我们不知道数据的个数有多少的话,往往会开辟一个长度很大的数组,如果数据的个数很少,那么函数给我们返回的数组就会有很多未使用的空间,这样一来就会造成空间浪费,消耗更多的gas,而在区块链上gas也是钱呐,我们本着能省就省的理念。

所以最好能忽略掉那些未使用的空间。

使用内联汇编可以很好的解决这个问题。

方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

function setOwners() external pure returns (uint256 length, address[] memory temp) {

temp = new address[](6);
uint ownerCount = 3;

for (uint i; i < 3; i++) {
temp[i] = address(0);
}

assembly {
mstore(temp, ownerCount)
length := mload(temp)
}
}

示例中,我们先开辟了一个长度为6的数组空间,而实际只操作了三个空间,我们需要返回数组的前三个元素即可。

效果演示

image-20230723155327880

评论



政策 · 统计 | 本站使用 Volantis 主题设计