Как разобраться с памятью Wasm Heap, которая экспортируется в JavaScriptJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Как разобраться с памятью Wasm Heap, которая экспортируется в JavaScript

Сообщение Anonymous »

Я пытался найти способ экспортировать вектор или другую кучу, выделенную в JavaScript. Я попробовал это: < /p>

Код: Выделить всё

use wasm_bindgen::prelude::*;
use std::alloc::{Layout, dealloc};

#[wasm_bindgen]
pub struct ArrayBuffer {
ptr: *const u8,
len: usize,
}

#[wasm_bindgen]
impl ArrayBuffer {
#[wasm_bindgen(getter)]
pub fn ptr(&self) -> *const u8 {
self.ptr
}

#[wasm_bindgen(getter)]
pub fn len(&self) -> usize {
self.len
}
}

#[wasm_bindgen]
pub fn get_array() -> ArrayBuffer {
let data = vec![1, 2, 3, 4, 5];
let ptr = data.as_ptr();
let len = data.len();

std::mem::forget(data);

ArrayBuffer { ptr, len }
}

#[wasm_bindgen]
pub fn free_array_raw(ptr: *mut u8, len: usize) {
unsafe {
let mut v = Vec::from_raw_parts(ptr, len, len);
v.fill(0);
drop(v);
}
}
< /code>
I Compile с wasm-pack targetting nodejs < /p>
wasm-pack build --target nodejs
< /code>
Вот мой код Javascript, который я использовал для его тестирования < /p>
const wasm = require('./pkg/wasm.js');

async function run() {
const arrayBuffer = wasm.get_array();
const ptr = arrayBuffer.ptr;
const len = arrayBuffer.len;

const memory = wasm.__wasm.memory;

const uint8Array = new Uint8Array(memory.buffer, ptr, len);

console.log(uint8Array);

arrayBuffer.free();
wasm.free_array_raw(ptr, len);

console.log(uint8Array);
}

run().catch(console.error);
< /code>
Память не складывается, я все еще могу получить доступ к данным < /p>
[root@localhost wasm]# node ./main.js
Uint8Array(5) [ 1, 2, 3, 4, 5 ]
Uint8Array(5) [ 1, 2, 3, 4, 5 ]
Как правильный способ сдать память кучи?

Подробнее здесь: https://stackoverflow.com/questions/796 ... javascript
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»