lua编译32位

一个星期之前,有一个网友在群里问为什么lua-5.1的lua_number类型为4字节,为什么不是double类型的8字节?带着这个问题,翻看了lua-5.3的代码,在默认情况lua_number都是8字节的。验证如下:a为8字节,如果输出为-1,说明就是64bit(-1在64bit有符号的二进制为0xFFFFFFFFFFFFFFFF)

输出结果为:

说明在默认情况下lua中number都是8字节。

代码如下:INT_MAX定义在系统的头文件limits.h,当前系统int最大值。例如32位INT_MAX为0x7FFFFFFF,64位0x7FFFFFFFFFFFFFFF

#if ((INT_MAX >> 15) >> 15) >= 1
#define LUAI_BITSINT	32
#else
/* 'int' always must have at least 16 bits */
#define LUAI_BITSINT	16
#endif
#if defined(LUA_32BITS)	

#if LUAI_BITSINT >= 32  
#define LUA_INT_TYPE	LUA_INT_INT
#else 
#define LUA_INT_TYPE	LUA_INT_LONG
#endif
#define LUA_FLOAT_TYPE	LUA_FLOAT_FLOAT

#elif defined(LUA_C89_NUMBERS)

#define LUA_INT_TYPE	LUA_INT_LONG
#define LUA_FLOAT_TYPE	LUA_FLOAT_DOUBLE

#endif				


/*
** default configuration for 64-bit Lua ('long long' and 'double')
*/
#if !defined(LUA_INT_TYPE)
#define LUA_INT_TYPE	LUA_INT_LONGLONG
#endif

#if !defined(LUA_FLOAT_TYPE)
#define LUA_FLOAT_TYPE	LUA_FLOAT_DOUBLE
#endif
流程图如下:


在默认情况下,LUA_INT_TYPE = LONGLONG,LUA_FLOAT_TYPE=DOUBLE,所以都是64位。那么问题来了,如何修改成32位的呢?从上图中可以知道,只需要定义LUA_32BITS即可。修改src/Makefile,我的是mac电脑,所以在macosx的target增加了-DLUA_32BITS的编译宏

重新编译lua:

make install的过程就不显示了。验证下是否int为32bit:a = 0xFFFFFFFF,如果输出为-1,说明a就是32bit(-1在无符号32位int中的二进制就是0xFFFFFFFF)


结果:


说明修改成功。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值