在使用node-addon-api实现Buffer传递时出现
原使用代码
Napi::Buffer<uint8_t> buf = Napi::Buffer<uint8_t>::New(info.Env(), (uint8_t *)_encode.data(), _encode.size());
这个代码持续运行一段时间后,程序会崩溃,目前分析的原因时,cpp传递给js的Buffer在js引擎自动回收时导致内存问题。然后看了一下node-addon-api源码发现
template <typename T>
inline Buffer<T> Buffer<T>::New(napi_env env, T* data, size_t length) {
napi_value value;
napi_status status = napi_create_external_buffer(
env, length * sizeof (T), data, nullptr, nullptr, &value);
NAPI_THROW_IF_FAILED(env, status, Buffer<T>());
return Buffer(env, value, length, data);
}
napi_status napi_create_external_buffer(napi_env env,
size_t length,
void* data,
napi_finalize finalize_cb,
void* finalize_hint,