У меня есть очень большой ArrayBuffer (или TypedArray) в JavaScript, который я хочу передать функции с emscript. Я хотел бы передать необработанные байты без копирования.
Если моя функция 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
, но это, похоже, не работает.
Что мне не хватает?
var ptr = Module._malloc(bytes); new Uint8Array(Module.HEAPU8.buffer, ptr, bytes);
не лучше, чемnew Uint8Array(bytes)
в JS? - person zakki   schedule 03.03.2017Module._malloc()
и передается непосредственно функции asm.js, ожидающейchar* ptr
, он не будет копироваться (как мне любезно объяснили на форуме emscripten). Полный ответ опубликую позже. - person Adi Shavit   schedule 03.03.2017EM_ASM
. - person HRJ   schedule 05.04.2017