Design: Accéder à la pile/au tas depuis Javascript

Créé le 12 juin 2018  ·  5Commentaires  ·  Source: WebAssembly/design

Est-il possible d'accéder au tas de l'instance WASM appelante au sein d'une fonction Javascript importée ?

Connexe, est-il possible de reprendre une instance après qu'une fonction Javascript importée a déclenché une exception ? Plus précisément, juste après le point où il s'est arrêté, y compris les données de tas actuelles, la pile d'appels, etc.

J'essaie de savoir s'il est possible de rendre les processus WASM persistants orthogonalement, et cela non seulement entre les appels, mais au sein des appels (par exemple lorsqu'ils manquent de ressources, voir https://github.com/ewasm/wasm -mesure).

Commentaire le plus utile

Un module WebAssembly n'a pas de tas, il a juste une mémoire qui est un vecteur plat d'octets. Lorsqu'un langage comme C++ est compilé en WebAssembly, le tas est stocké dans la mémoire, tout comme les autres données.

En général, la pile d'appels WebAssembly (qui inclut la pile des fonctions appelées et leurs locaux) n'est pas stockée en mémoire et n'est pas accessible. Mais lorsqu'un langage comme C++ est compilé en WebAssembly, certains éléments de la pile C++ peuvent être stockés en mémoire. Il s'agit généralement des variables C++ « prises d'adresses » et des grands tableaux.

Tous les 5 commentaires

Est-il possible d'accéder au tas de l'instance WASM appelante au sein d'une fonction Javascript importée ?

Oui, vous pouvez accéder à la mémoire linéaire si vous l'exportez depuis le module. Ce sera un objet WebAssembly.Memory , et sa propriété buffer est un ArrayBuffer avec le contenu de la mémoire linéaire.

Connexe, est-il possible de reprendre une instance après qu'une fonction Javascript importée a déclenché une exception ?

Non, ce n'est pas possible actuellement. La pile d'appels est rejetée lorsqu'une exception est levée. Pour ce faire, vous devez instrumenter votre module pour permettre ce comportement. Il est probable que certaines des extensions discutées dans la proposition de gestion des

Le tas est-il contenu dans la mémoire tampon ? Je ne l'ai pas vu mentionné dans la documentation.
Il semble également impossible d'accéder à la pile d'appels au sein de la fonction javascript importée sans instrumenter le module WASM.

Un module WebAssembly n'a pas de tas, il a juste une mémoire qui est un vecteur plat d'octets. Lorsqu'un langage comme C++ est compilé en WebAssembly, le tas est stocké dans la mémoire, tout comme les autres données.

En général, la pile d'appels WebAssembly (qui inclut la pile des fonctions appelées et leurs locaux) n'est pas stockée en mémoire et n'est pas accessible. Mais lorsqu'un langage comme C++ est compilé en WebAssembly, certains éléments de la pile C++ peuvent être stockés en mémoire. Il s'agit généralement des variables C++ « prises d'adresses » et des grands tableaux.

Ah, je vois, alors c'est à ça que sert le __heap_base !

Instance {
  exports: 
   { memory: Memory {},
     __heap_base: 66560,
     __data_end: 1024,
     main: [Function: 2],
     fac: [Function: 3] }
}

Merci beaucoup!

WebAssembly.Memory est ce qu'on appelle le tas

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

beriberikix picture beriberikix  ·  7Commentaires

arunetm picture arunetm  ·  7Commentaires

chicoxyzzy picture chicoxyzzy  ·  5Commentaires

jfbastien picture jfbastien  ·  6Commentaires

dpw picture dpw  ·  3Commentaires