Design: Mengakses tumpukan/tumpukan dari Javascript

Dibuat pada 12 Jun 2018  ·  5Komentar  ·  Sumber: WebAssembly/design

Apakah mungkin untuk mengakses tumpukan instance WASM yang memanggil dalam fungsi Javascript yang diimpor?

Terkait, apakah mungkin untuk melanjutkan instance setelah fungsi Javascript yang diimpor memberikan pengecualian? Secara khusus, tepat setelah titik di mana ia berhenti, termasuk data tumpukan saat ini, tumpukan panggilan, dll.

Saya mencoba mencari tahu apakah mungkin untuk membuat proses WASM persisten secara ortogonal, dan itu tidak hanya di antara panggilan, tetapi di dalam panggilan (misalnya ketika mereka kehabisan sumber daya, lihat https://github.com/ewasm/wasm -pengukuran).

Komentar yang paling membantu

Modul WebAssembly tidak memiliki tumpukan, hanya memiliki memori yang merupakan vektor datar byte. Saat bahasa seperti C++ dikompilasi ke WebAssembly, heap disimpan di memori, begitu juga data lainnya.

Secara umum, tumpukan panggilan WebAssembly (yang mencakup tumpukan fungsi yang dipanggil dan lokalnya) tidak disimpan dalam memori, dan tidak dapat diakses. Tetapi ketika bahasa seperti C++ dikompilasi ke WebAssembly, beberapa elemen dari tumpukan C++ dapat disimpan dalam memori. Umumnya ini adalah variabel C++ "diambil alamat" dan array besar.

Semua 5 komentar

Apakah mungkin untuk mengakses tumpukan instance WASM yang memanggil dalam fungsi Javascript yang diimpor?

Ya, Anda dapat mengakses memori linier jika Anda mengekspornya dari modul. Ini akan menjadi objek WebAssembly.Memory , dan properti buffer adalah ArrayBuffer dengan isi memori linier.

Terkait, apakah mungkin untuk melanjutkan instance setelah fungsi Javascript yang diimpor memberikan pengecualian?

Tidak, itu tidak mungkin saat ini. Tumpukan panggilan dibuang ketika pengecualian dilemparkan. Untuk melakukan ini, Anda harus melengkapi modul Anda untuk memungkinkan perilaku ini. Sepertinya beberapa ekstensi yang dibahas dalam proposal penanganan pengecualian juga akan membantu di sini.

Apakah tumpukan terkandung dalam buffer memori? Saya belum melihatnya disebutkan dalam dokumentasi.
Tampaknya juga tidak mungkin untuk mengakses tumpukan panggilan dalam fungsi javascript yang diimpor tanpa melengkapi modul WASM.

Modul WebAssembly tidak memiliki tumpukan, hanya memiliki memori yang merupakan vektor datar byte. Saat bahasa seperti C++ dikompilasi ke WebAssembly, heap disimpan di memori, begitu juga data lainnya.

Secara umum, tumpukan panggilan WebAssembly (yang mencakup tumpukan fungsi yang dipanggil dan lokalnya) tidak disimpan dalam memori, dan tidak dapat diakses. Tetapi ketika bahasa seperti C++ dikompilasi ke WebAssembly, beberapa elemen dari tumpukan C++ dapat disimpan dalam memori. Umumnya ini adalah variabel C++ "diambil alamat" dan array besar.

Ah, begitu, jadi untuk itulah __heap_base!

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

Terima kasih banyak!

WebAssembly.Memori disebut tumpukan

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

bobOnGitHub picture bobOnGitHub  ·  6Komentar

mfateev picture mfateev  ·  5Komentar

frehberg picture frehberg  ·  6Komentar

artem-v-shamsutdinov picture artem-v-shamsutdinov  ·  6Komentar

spidoche picture spidoche  ·  4Komentar