当前位置:网站首页>【lua】int64的支持
【lua】int64的支持
2022-07-04 22:17:00 【米莱虾】
之前的版本中,lua 只默认支持 double 类型,虽然可以通过修改 luaconf.h 里的定义把 lua number改为 int64,但为了 int64 类型放弃 double 显然不合适,属于顾此失彼。
那么,对于 64bit 的解决方案有很多,基本思路都是使用 8bytes 的string / lightuserdata / userdata修改元表来实现。
我们一般使用 8bytes 长的 string 来表示一个 int64 。这样既可以做唯一的 key 用,又不用做复杂的扩展,属于比较好的处理方式。
如果想要在项目中直接处理 64bit 的 timestamp。这就需要对int64做数学运算了。在 luajit 中,是定义了一个 userdata 并重载其运算符完成的。即可以用 ffi.cast("int64_t",0)
来构造一个 64bit 的0。对于这种做法,姑且不谈 userdata 的额外开销问题,这样做有一个问题就是当 64bit 的 cdata 做 table 的 key 的时候,相同值的 int64 并不是同一个 key 。
因此,有了一个更轻量的方式来解决 int64 支持的问题。那就是在 64 位平台上,我们完全可以用 lightuserdata 无损失的表示一个 int64,通过给 lightuserdata 设置 metatable ,我们可以接管它的数据运算。唯一不足的是,比较一个 int64 和普通的 lua number 是否相等时,lua 不能隐式的做转换(大于小于比较没有问题)。
由此,风云大神花了点时间构造了一个库。这个库只提供了一个显式的 api ,即构造一个 int64 数字。可以从 lua number 构造,也支持从一个 8 字节宽的小头的字符串来构造。实际在内存储存的是一个 lightuserdata 即一个 64bit 指针(所以这个库不适用于 32 位平台)。也可以通过 C 接口 lua_pushlightuserdata
来把一个 64bit 整数压入堆栈。
把 int64 转换为普通的 lua number 借用了 # 操作符。
边栏推荐
- 达梦数据凭什么被称为国产数据库“第一股”?
- With this PDF, we finally got offers from eight major manufacturers, including Alibaba, bytek and Baidu
- Prosperity is exhausted, things are right and people are wrong: where should personal webmasters go
- Nat. Commun.| Machine learning jointly optimizes the affinity and specificity of mutagenic therapeutic antibodies
- 虚拟人产业面临的挑战
- PostgreSQL服务端编程聚合和分组
- 蓝队攻防演练中的三段作战
- 2022-07-04: what is the output of the following go language code? A:true; B:false; C: Compilation error. package main import “fmt“ func main() { fmt.Pri
- Google Earth Engine(GEE)——Tasks升级,实现RUN ALL可以一键下载任务类型中的所有影像
- 微服务--开篇
猜你喜欢
Convolutional neural network model -- lenet network structure and code implementation
Logo special training camp section II collocation relationship between words and graphics
AscendEX 上线 Walken (WLKN) - 一款卓越领先的“Walk-to-Earn”游戏
The use of complex numbers in number theory and geometry - Cao Zexian
LOGO特训营 第五节 字体结构与设计常用技法
Enabling digital economy Fuxin software attends the BRICs high level Forum on Sustainable Development
NFT Insider #64:电商巨头eBay提交NFT相关商标申请,毕马威将在Web3和元宇宙中投入3000万美元
Logo Camp d'entraînement section 3 techniques créatives initiales
LOGO特训营 第二节 文字与图形的搭配关系
LOGO特训营 第四节 字体设计的重要性
随机推荐
阿里推出新品牌“瓴羊”,致力成为“数字化领头羊”
短视频系统源码,点击屏幕空白处键盘不自动收起
Sqlserver encrypts and decrypts data
Why should garment enterprises talk about informatization?
Shell script implements application service log warehousing MySQL
php短视频源码,点赞时会有大拇指动画飘起
力扣3_383. 赎金信
Locust性能测试 —— 环境搭建及使用
Éducation à la transmission du savoir | Comment passer à un test logiciel pour l'un des postes les mieux rémunérés sur Internet? (joindre la Feuille de route pour l'apprentissage des tests logiciels)
Logo Camp d'entraînement section 3 techniques créatives initiales
UML diagram memory skills
Scala下载和配置
LOGO特训营 第五节 字体结构与设计常用技法
La prospérité est épuisée, les choses sont bonnes et mauvaises: Où puis - je aller pour un chef de station personnel?
UML图记忆技巧
Deveco device tool 3.0 release brings five capability upgrades to make intelligent device development more efficient
ACM multimedia 2022 | counterfactual measurement and elimination of social prejudice in visual language pre training model
A large number of virtual anchors in station B were collectively forced to refund: revenue evaporated, but they still owe station B; Jobs was posthumously awarded the U.S. presidential medal of freedo
制作条形码的手机App推荐
Machine learning notes mutual information