簡體   English   中英

將原生抽象用於Node.js時如何管理內存?

[英]How do I manage memory when using Native Abstractions for Node.js?

我正在使用Node.js的本機抽象(NAN)從node.js程序調用C ++函數。

一個C ++使用新的char []分配一個緩沖區,並將其返回到我的node.js程序。

我的問題是我不知道誰負責釋放此內存。 我在C ++代碼中使用NanReturnValue返回指向緩沖區的指針。 如果我立即刪除[],則node.js代碼只會變得垃圾。 但是,如果我根本不刪除[],似乎可能存在內存泄漏(盡管泄漏的可能性在其他地方)。 該文檔非常稀疏,並且不清楚由誰(無論是JavaScript還是C ++)負責分配此內存。

您需要連接到v8中的GC才能獲得對C ++代碼的回調,從而使您知道沒有JavaScript對象具有對您返回的緩沖區的引用。

在該C ++回調中,您可以delete ArrayBuffer內存。

我確定您已經看過這些文檔,但請注意Nan :: FreeCallBack()部分: https : //github.com/nodejs/nan/blob/master/doc/buffers.md#api_nan_free_callback

這是一個簡單的示例:

//defined before hand:
static void FreeCallback(char* data, void* message) {
   free(message);
}
    //some where in a function:
    Local<Object> buf_obj = NanNewBufferHandle((char*)zmq_msg_data(message), zmq_msg_size(message), FreeCallback, message);

對於您的緩沖區,可能會有一些差異,但是我希望可以使您對前進的方向有所了解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM