对于
_json_parse
这个函数调用而言,由于我们传入的是字符串,因此实际上是程序运行内存上的某个地址,其很自然地进行了操作。接着它先对栈顶进行了保存,然后将
$jsonstr$addr
(实际上就是)传递给了
_cJSON_Parse
函数,最后进行一系列相关调用后恢复栈地址,结束运行。在这里需要我们注意的是,实际上
$jsonstr$addr
的相关连续内存的内容上就是我们通过
Module.HEAPU8.set
设置的对应数据,如果需要传递类似如上的指针数据的话,其实质上是传递了程序运行内存的对应地址信息。因此我们如果直接传入 JavaScript 的原生字符串、对象、数组等对象参数,ASM.js 并不能将其从自己程序的运行内存中获取(内存地址信息并不一致)。对于 WebAssembly 而言其调用本质与 ASM.js 一致,若有兴趣可以编译后自行探索。