使用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_);
}
任何建议表示赞赏。
答案 0 :(得分:0)
在V8的GC上调用回调,而不是在C ++中删除缓冲区时。你能构建一个循环,用V8的GC清理缓冲区吗?