- 13 名前:デフォルトの名無しさん mailto:sage [2019/01/27(日) 02:20:20.81 ID:UeSsBKpf.net]
- >>9
>どうやら、STACKTOP、HEAP32[] を使うのは、asm.js 流で、 >wasm の stack はまた別系統になっているらしい。 C/C++ の文字列のポインタを JS の関数に渡して、JSで 文字列として扱いたい場合、Emscripten が用意している Pointer_stringify() という JS の関数を使うことになる。 この関数のソースを見てみたところ、例えば、 writeArrayToMemory: function(array, buffer) { for (var i = 0; i < array.length; i++) { HEAP8[ buffer++ ] = array[i]; } } のような関数を使っており、HEAP8[] 配列が使われている。 これは、asm.js 流の stack を恐らく「必ず」使っている事を 意味するのだと思う。言いたいことは、wasm の 「nativeな」 stack の仕組みを使わずに、JS の global 変数的に TypedArray として HEAP8[] を確保して、それを「必ず」使っている、ということ。 そうでなければ、Pointer_stringify() 関数が使えなくなってしまうはずだから。 その結果、wasm の native stack を使って無いので、ブラウザの JIT が働いても、 CPUレジスタが効率よく使われる可能性は低くなる。 ただ、C/C++ と JS 間の文字列の受け渡しは大切で、上記のような実装以外は 現状、多分できそうにない。なら、結論的には、Emscripten がどんなに 改良されても、wasm 側に何らかの改良が施されない限り、wasm の native stack を使用した wasm コードは根本的に生成できないと思われる。
|

|