可靠性:内存与堆栈

问题描述 投票:0回答:1

Solidity 有 3 种不同的内存存储:存储、内存和堆栈。网上看了很多文章,还是不明白内存和栈的区别。我的问题是:

Q1。内存和堆栈有什么区别?

Q2。假设我在函数中定义了一个局部变量,我怎么知道这个变量是存储在内存中还是栈中呢? (只有当变量声明带有“memory”关键字时,变量才在内存中?)

谢谢大家。


感谢@Yilmaz 的回复。 根据你的回答,假设我们有一个这样写的函数:

function test() public {
    string memory str;
    int i;
}

str
i
同时位于“内存”和“堆栈”上吗?

我的第三个问题是:

Q3。为什么只有数组、结构体和映射类型需要指定内存位置? 为什么 Solidity 不允许我在上面的代码中写

int memory i;

storage ethereum blockchain solidity smartcontracts
1个回答
5
投票

存储是变量永久存储在区块链上的地方。如果您想操作存储中的数据,请将其复制到内存中。然后,所有内存代码都在堆栈上执行。堆栈有一个最大值 深度为 1024 个元素,支持 256 位字长。

定义局部变量时,它会存储在内存中,然后压入堆栈执行。

  • Stack是以太坊EVM用来带来的临时存储 来自其他存储的数据可以对其进行处理。
    str
    i
    两者不同时位于“内存”和“堆栈”上。您会看到图像,有
    push
    代码将变量从内存移动到堆栈。如果
    EVM
    立即保留在内存和堆栈上,则不会具有成本效益。

对于您的第三个问题,请参考:在以太坊 Solidity 中,“内存”关键字的用途是什么?

我已经详细解释了

© www.soinside.com 2019 - 2024. All rights reserved.