为啥会出现错误:“InternalCompilerError:请求的静态内存负载超过 32 个字节”?
Posted
技术标签:
【中文标题】为啥会出现错误:“InternalCompilerError:请求的静态内存负载超过 32 个字节”?【英文标题】:Why the error: "InternalCompilerError: Static memory load of more than 32 bytes requested"?为什么会出现错误:“InternalCompilerError:请求的静态内存负载超过 32 个字节”? 【发布时间】:2018-06-18 00:48:52 【问题描述】:使用 Remix (https://remix.ethereum.org/) 并使用 struct。编译器是0.4.19+commit.c4cbbb05
。 “优化”未选中。
pragma solidity ^0.4.4;
contract Test
struct FooBar
uint8 foo;
uint16 bar;
FooBar public fooBar;
function getFooBar() public view returns(FooBar)
return fooBar;
function setFooBar(FooBar value) public
fooBar = value;
它显示错误:“InternalCompilerError: Static memory load of more than 32 bytes requested.”
不知道为什么。在我看来,结构 FooBar
只有 3 个字节大。我的两个函数都读取/写入单个FooBar
。我在这里错过了什么?
更新
对代码进行了一些重构,使其更清晰:
pragma solidity ^0.4.4;
contract Test
struct FooBar
uint8 foo;
uint16 bar;
FooBar public fooBar;
// InternalCompilerError: Static memory load of more than 32 bytes requested.
function setFooBar1(FooBar value) public
fooBar = value;
// No such error.
function setFooBar2(uint8 foo, uint16 bar) public
fooBar.foo = foo;
fooBar.bar = bar;
显然直接传递结构体会导致编译错误,而传递单个字段则不会。想知道有什么区别。
【问题讨论】:
我对这个环境一无所知,但“内部编译器错误”通常意味着它所说的:编译器内部出现错误时:一个错误。您的程序可能正确也可能不正确。 【参考方案1】:这似乎是一个可靠的错误 - 请参阅:
https://github.com/ethereum/solidity/issues/3361
和:
https://github.com/ethereum/solidity/issues/3069
现在还有一个用于以太坊的 Stack Exchange:
https://ethereum.stackexchange.com/
【讨论】:
谢谢@ligi。第一个问题(3361)似乎正是我在这里面临的问题。所以,谢谢你的指点。适当地注意到了论坛。 :) 虽然您的回答并没有解决问题(即使编译错误消失),但我仍然将其标记为已回答,因为它指向一个更好的页面,其中提出了相同的问题并将希望得到解决。以上是关于为啥会出现错误:“InternalCompilerError:请求的静态内存负载超过 32 个字节”?的主要内容,如果未能解决你的问题,请参考以下文章