Я хочу предоставить память, чтобы поделиться с Javascript.В C и Rust есть malloc () и free () (для Rust это предоставляет wbindgen).Я не мог найти что-то подобное в Go?Как я могу зарезервировать память, получить указатель на нее и освободить ее после использования?
Пример использования.Сделайте что-нибудь с растровым изображением (Javascript):
const context = canvas.getContext("2d");
const size = canvas.width * canvas.height * 4;
// allocate memory in Go
const ptr = window.wasm.go.malloc(size);
const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
const dataGo = new Uint8ClampedArray(window.wasm.goMem.buffer, ptr, size);
const imageDataGo = new ImageData(dataGo, canvas.width, canvas.height);
imageDataGo.data.set(imageData.data);
// run function in Go using the pointer to the memory
window.wasm.go.convolve_mem(ptr, canvas.width, canvas.height);
context.putImageData(imageDataGo, 0, 0);
// free the memory
window.wasm.go.free(size);
Я попробовал это (Go):
exports["malloc"] = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
size := args[0].Int()
mem := make([]byte, size)
ptr := uintptr(unsafe.Pointer(&mem))
return uint64(ptr)
})
make
должен инициализировать все элементы массива байтов с 0. Нов JS я получаю случайный массив.Поэтому я предполагаю, что это не работает, как ожидалось.Я также предполагаю, что сборщик мусора освобождает память сразу после возврата функции.
Как зарезервировать память в Go, как я могу это сделать в C?
go версия go1.12.1Linux / amd64