使用node :: Buffer包装现有内存

时间:2014-12-20 05:40:43

标签: c++ node.js v8

使用node.js node :: Buffer包装现有内存的正确方法是什么?我似乎无法通过Buffer调用free_callback。

我知道在IRC上有一些关于摆脱这个问题的喋喋不休。我们参加了0.10.x系列,但必要时可以移动......

void free_test_cb(char *m,void *hint) {
    DBG_OUT("FREEING MEMORY.");
    free(m);
}

Handle<Value> WrapMemBufferTest(const Arguments& args) {
    HandleScope scope;
    char *mem = (char *) ::malloc(100);
    memset(mem,'A',100);
    node::Buffer *buf = node::Buffer::New(mem,100,free_test_cb,0);
    return scope.Close(buf->handle_);
}

free_test_cb()只是在一个简单的测试程序中被调用。 ......然后我甚至尝试将它们扔在那里:

void weak_cb(Persistent<Value> object, void* parameter) {
    object.Dispose();
}

Handle<Value> WrapMemBufferTest(const Arguments& args) {
    HandleScope scope;
    char *mem = (char *) ::malloc(100);
    memset(mem,'A',100);
    node::Buffer *buf = node::Buffer::New(mem,100,free_test_cb,0);
    buf->handle_.MakeWeak(NULL, weak_cb);  // new
    return scope.Close(buf->handle_);
}

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

在V8的GC上调用回调,而不是在C ++中删除缓冲区时。你能构建一个循环,用V8的GC清理缓冲区吗?