码迷,mamicode.com
首页 > 其他好文 > 详细

Lua Userdata

时间:2015-06-29 19:19:02      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

       本文内容基于版本:Lua 5.3.0

概述


       Userdata在储存形式上和字符串十分类似,也是在代表该数据类型的结构体Udata后面直接追加数据内容部分。Userdata可以看成是拥有独立元表,没有内部化处理,也不需要追加‘\0‘字符的字符串 。从底层来看,Userdata和字符串存储的都是二进制数据,因此它们必然有一定的共同性,而由于两者用途不同又展现出一定的差异性。阅读Lua源码可以看到Userdata和字符串的实现代码被放在一起, 两者的API也以luaS打头。

Udata结构


• Udata结构的声明

      Lua中Userdata对应的C结构为Udata,该类型定义在lobject.h中。

// lobject.h
/*
** Common Header for all collectable objects (in macro form, to be
** included in other objects)
*/
#define CommonHeader    GCObject *next; lu_byte tt; lu_byte marked

//
lobject.h /* ** Header for userdata; memory area follows the end of this structure ** (aligned according to ‘UUdata‘; see next). */ typedef struct Udata { CommonHeader; lu_byte ttuv_; /* user value‘s tag */ struct Table *metatable; size_t len; /* number of bytes */ union Value user_; /* user value */ } Udata;

 • Udata存储结构图

       Lua中Userdata数据内容部分并未分配独立的内存来存储,而是直接追加在Udata结构的后面。Udata存储结构如下图:

       技术分享

 

Lua Userdata

标签:

原文地址:http://www.cnblogs.com/heartchord/p/4607668.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!