У меня очень большой ArrayBuffer (или TypedArray) в JavaScript, который я хочу передать в функцию emscrippted. Я хотел бы передать необработанные байты без создания копии.
Если моя функция C / 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
, но это не похоже на работу.
Что мне не хватает?
Отвечаю сам.
В настоящее время не существует способа, позволяющего коду C / C ++, имеющему шифрование, обращаться к буферам памяти, выделенным JS.
Это, как говорится, буферы, выделенные через Module._malloc () Можно передаваться «по указателю» при использовании C API.
Embinding добавит дополнительное копирование в типы C ++.
Для получения дополнительной информации см. этот поток в списке рассылки emscripten.
Других решений пока нет …