为啥 AssemblyScript 中的 store() 不在指定指针处存储数据?

Posted

技术标签:

【中文标题】为啥 AssemblyScript 中的 store() 不在指定指针处存储数据?【英文标题】:Why does store() in AssemblyScript not store data at the specified pointer?为什么 AssemblyScript 中的 store() 不在指定指针处存储数据? 【发布时间】:2021-10-17 20:53:31 【问题描述】:

我有一些汇编脚本代码:

export function run(): void 
  store<string>(0, 'hello, my name is marty');

在内存中存储指针0处的字符串。

但是,生成的 .wat 文件将字符串存储在位置 1056 而不是 0

(module
 (type $none_=>_none (func))
 (memory $0 1)
 (data (i32.const 1036) "L")
 (data (i32.const 1048) "\01\00\00\00.\00\00\00h\00e\00l\00l\00o\00,\00 \00m\00y\00 \00n\00a\00m\00e\00 \00i\00s\00 \00m\00a\00r\00t\00y")
 (export "run" (func $assembly/index/run))
 (export "memory" (memory $0))
 (func $assembly/index/run
  i32.const 0
  i32.const 1056
  i32.store
 )
)

【问题讨论】:

【参考方案1】:

它将值为1056的字符串指针存储到线性内存中的零(0)索引中。所以一切都正确。

【讨论】:

以上是关于为啥 AssemblyScript 中的 store() 不在指定指针处存储数据?的主要内容,如果未能解决你的问题,请参考以下文章

三等号(===)在AssemblyScript中的行为是否不同?

优化的 AssemblyScript 仍然是 4K,用于简单的乘法

是否可以从 AssemblyScript 导入 .wasm 文件?

AssemblyScript:动态本地数组大小

WebAssembly学习:AssemblyScript - Hello World

AssemblyScript 是不是支持函数数组?