Подтвердить что ты не робот

Передача JS ArrayBuffer или TypedArray в Emscripten без копирования

У меня есть очень большой массив ArrayBuffer (или TypedArray) в JavaScript, который я хочу передать в функцию emscriptened. Я бы хотел передать необработанные байты без копирования.

Если моя C/С++ функция принимает std::string, как в:

void processBuffer(std::string const& buffer)

Я могу получить данные, но IIUC, преобразование в std::string приведет к копированию буфера.

Есть ли способ передать необработанный буфер без копии?
Мой доступ строго к чтению.

Я пробовал:

void processBuffer(const char* str, size_t size);

с настройкой allow_raw_pointers() в EMSCRIPTEN_BINDINGS, но это, похоже, не работает.
Что мне не хватает?

4b9b3361

Ответ 1

Отвечая на вопрос. Как и в настоящее время, нет возможности разрешить emscriptened код C/С++ для доступа к выделенным буферам памяти JS.

При этом буферы, распределенные через Module._malloc(), могут быть переданы "указателем" при использовании C API.

Embinding добавит дополнительное копирование в типы С++.

Для получения дополнительной информации см. этот поток в списке рассылки emscripten.