30 数据内存指针为什么要加0x20?

在函数内调用内联汇编时,如果

bytes memory data = 0x1234;
uint size = data.length;
assembly{
    pop(call(gas(), addr, 0, add(data,0x20), size, 0,0))
}

这里的call调用中,指向内存0x1234的指针为什么是data+0x20 而不是data? 我在remix调试中确实看到数据存放位置是0x80+0x20, 但是这里为啥呢??

请先 登录 后评论

最佳答案 2021-07-10 21:35

bytes memory data = **0x1234**;
uint size = data.length;
assembly{
    pop(call(gas(), addr, **0**, add(data,**0x20**), mload(data), **0**,**0**))
}

因为solidity编译时,data指针指向的是内存数据块的大小,而紧接着的data+0x20指针指向的是内存数据库开始位置处

请先 登录 后评论

其它 0 个回答

  • 0 关注
  • 2 收藏,2836 浏览
  • bixia1994 提出于 2021-07-10 09:49