asm.js 仕様に、コンパイラがネイティブ アセンブリ コードを直接生成できないようにする「設計上の制限」があるかどうかを知りたいです。
今のところ、Firefox はネイティブ コードの半分の速度で実行できるようですが、なぜネイティブの速度で実行されないのか疑問に思っています。私が見る限り、asm.js は asm によく似ています。
asm.js 仕様に、コンパイラがネイティブ アセンブリ コードを直接生成できないようにする「設計上の制限」があるかどうかを知りたいです。
今のところ、Firefox はネイティブ コードの半分の速度で実行できるようですが、なぜネイティブの速度で実行されないのか疑問に思っています。私が見る限り、asm.js は asm によく似ています。
制限は現在Typed Array
、Javascriptのタイプをメモリとして使用しています(スタックとヒープです)。これは、asm.js で生成された Javascript と対話する他のスクリプトが原因であり、共有の「メモリ」スペースが必要です。Typed Array
また、 s は実際のヒープ メモリとして実装されていると思いますが、これはスタックを使用するよりも遅くなります。
Firefox のコンパイラは、C コンパイラほど asm.js コードにメリットをもたらす最適化を行わないためです。Windows では、コンパイルされたコードが配列アクセスの境界チェックを実行する必要があるため (他の OS では、Firefox の asm.js コンパイラである OdinMonkey がメモリ保護を使用します)。