繁体   English   中英

Solidity:内存与堆栈

[英]Solidity: memory vs stack

Solidity 有 3 种不同的内存存储:存储、内存和堆栈。 在网上看了很多文章后,我仍然无法理解内存和堆栈之间的区别。 我的问题是:

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

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

感谢大家。


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

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

stri是否同时在“内存”和“堆栈”上?

我的第三个问题是:

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

在此处输入图像描述

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

当您定义局部变量时,它会存储在内存中,然后推送到堆栈中执行。

  • (你不应该问超过 1 个问题)

对于您的第三个问题,请参考: 在 Ethereum Solidity 中,“memory”关键字的目的是什么?

我详细解释了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM