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

bixia1994 bixia1994 提出于 2021-07-10 09:49 5238 浏览

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

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 条评论
bixia1994
bixia1994 互联网小工

采纳率 33% · 回答于 2021-07-10 15:40

其它 0 个回答

写回答

你需要登录后才可以回答问题,登录