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编译32位_第1张图片

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

重新编译lua:lua编译32位_第2张图片

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


结果:


说明修改成功。

你可能感兴趣的:(lua)