【发布时间】:2020-02-21 11:16:54
【问题描述】:
我正在尝试使用 C 到 WebAssembly。但我无法理解以下内容:
int atAddressN(unsigned int idx) {
unsigned int* intptr = 0;
return intptr[idx];
}
int atAddress2(unsigned int idx) {
unsigned int* intptr = 0;
return intptr[2];
}
结果如下 wasm/wat:
(module
(table 0 anyfunc)
(memory $0 1)
(export "memory" (memory $0))
(export "atAddressN" (func $atAddressN))
(export "atAddress2" (func $atAddress2))
(func $atAddressN (; 0 ;) (param $0 i32) (result i32)
(unreachable)
(unreachable)
)
(func $atAddress2 (; 1 ;) (param $0 i32) (result i32)
(i32.load offset=8
(i32.const 0)
)
)
)
所以第二个函数没问题,但第一个函数只产生(unreachable)。我应该做些什么来让它编译好吗?
【问题讨论】:
-
当您取消引用空指针时,这两个函数都会导致 未定义的行为。
-
内存是事先布局好的(用Webassembly.Memory从JS调用),原则上应该没问题。
-
我会开始尝试普通的 C 语言。
标签: c webassembly