Передача 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
, но это, похоже, не работает.
Что мне не хватает?
Ответы
Ответ 1
Отвечая на вопрос.
Как и в настоящее время, нет возможности разрешить emscriptened код C/С++ для доступа к выделенным буферам памяти JS.
При этом буферы, распределенные через Module._malloc(), могут быть переданы "указателем" при использовании C API.
Embinding добавит дополнительное копирование в типы С++.
Для получения дополнительной информации см. этот поток в списке рассылки emscripten.