Lua中Userdata类型源码实现

这篇博客探讨了Lua中的Userdata类型,指出其内存布局与字符串相似,由头部和相关数据组成,并且每个Userdata都有独立的元表。文章引用了Lua 5.2.1的源码及《Lua程序设计》(第二版)作为参考资料。
摘要由CSDN通过智能技术生成
    1、概述
    Lua中userdata分两种,一种是轻量级userdata(light userdata),轻量级userdata是一种表示C指针的值,对Lua虚拟机来说,这种数据类型不需要GC(垃圾回收),其指向的内存由用户分配和释放,其实现就是一个void *p指针;后一种userdata类型完全userdata(full userdata),内存是由Lua虚拟机分配,并有GC机制负责处理。下面将通过Lua 5.2.1的源码来看后一种userdata的实现。
    2、源码实现

    userdata内存存储形式类似于字符串,以一个头开始然后紧随头后面保存相关的数据,但是每个userdata都拥有自己独立的元表。下面是userdata对应的头数据结构Udata代码(lobject.h):

431 /*                                                                                                 
432 ** Header for userdata; memory area follows the end of this structure                              
433 */                                                                                                 
434 typ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值