使用luajit ffi会遇到cdata引用cdata的情况。官方说明是必须手动保存所有cdata的引用,否则会被gc掉。

ffi.cdef[[
struct A { int id; };
struct B { int id; struct A* a; };
]] function createB()
local a = ffi.new("struct A")
local b = ffi.new("struct B")
b.a = a
return b
end

比如上述代码是不能正常运行的。你比如同时持有a和b。这样使用起来非常不方便,一旦c struct层级多了,太麻烦。我上github上问了这个问题,luajit的作者Mike给我提供了几个解决办法。我使用了第2种方法:把所有cdata放到一个chunk里,这样只需要持有一个chunk即可。另外我又实现了一个纯lua的方法,原理是建立一个与c struct结构相同的lua table,把引用都保存到lua table里。代码在:https://github.com/vkensou/cdatarefcdata

最新文章

  1. C语言调用curl库抓取网页图片
  2. nginx 学习笔记(9) 配置HTTPS服务器--转载
  3. 编写windows版ANE
  4. c# 进程间通信 IPC
  5. flex+AS3编程规范
  6. 解决Centos6.5虚拟机上网问题
  7. c++ 基础学习: 左值 概念cocos2d-x3.0的实际应用
  8. 使用APMServ本地搭建多个网站
  9. 测试框架mochajs详解
  10. Sliverlight之 控件模板
  11. Windows 8.1 Preview的新功能和新API
  12. [Q]将图纸转换为JPG、PNG、plt、DWF、DWFx,XPS等格式文件
  13. Hue集成Hadoop和Hive
  14. destoon分页
  15. urllib,request 设置代理
  16. SpringBoot图片上传(五) 上一篇的新版本,样式修改后的
  17. python 正则表达式替换字符串中匹配的字符
  18. 使用API接口在zabbix系统中登陆、创建、删除agent
  19. Delphi for iOS开发指南(3):创建一个FireMonkey iOS应用程序
  20. Randy Pausch’s Last Lecture

热门文章

  1. C语言 屏幕截图 (GDI)
  2. 螺旋矩阵O(1)根据坐标求值
  3. BGP团体属性的应用案例
  4. win7下Oracle库imp导入dmp
  5. Spring Cloud的核心成员、以及架构实现详细介绍
  6. 从头学pytorch(九):模型构造
  7. 为你写诗:3 步搭建 Serverless AI 应用
  8. 【题解】HDU5845 Best Division (trie树)
  9. 通用高效的数据修复方法:Row level repair
  10. 超详细Node安装教程