lua_pushstring 减少内存拷贝 一、前言 本篇文章是小编对lua的一个终结篇,lua本身要学的并不是很多,很多都是三方模块,因此这里小编只能和大家最后再补充下lua的一些没讲到的地方。 二、垃圾收集器 lua提供了垃圾收集的功能,我们可以通过一个方法来实现,他就是collectgarbage,它里面有两个参数,分别为选项和参数,如下...
function newStack () return {""} -- starts with an empty string end function addString (stack, s) table.insert(stack, s) -- push 's' into the the stack for i=table.getn(stack)-1, 1, -1 do if string.len(stack[i]) > string.len(stack[i+1]) then break end stack[i] = sta...
lua_pushnumber void lua_pushnumber (lua_State *L, lua_Number n); 把一个数字n压栈。 lua_pushstring void lua_pushstring (lua_State *L, const char *s); 把指针s指向的以零结尾的字符串压栈。 Lua 对这个字符串做一次内存拷贝(或是复用一个拷贝),因此s处的内存在函数返回后,可以释放掉或是重...
lua_ucl_to_string (lua_State *L, const ucl_object_t *obj, enum ucl_emitter type) { unsigned char *result; size_t len; result = ucl_object_emit (obj, type); result = ucl_object_emit_len (obj, type, &len); if (result != NULL) { lua_pushstring (L, (const char *)result)...
lua_pushxxx,其中xxx代表不同的数据类型,如lua_pushnumber、lua_pushstring等。这些函数用于将不同类型的值压入Lua 堆栈。 lua_pushnumber(lua_State* L, lua_Number n) 说明:将一个lua_Number类型的数值压入堆栈。 参数: L:Lua 状态(Lua 虚拟机实例)的指针。
*/ typedef union UTString { L_Umaxalign dummy; /* ensures maximum alignment for strings 确保字符串的最大对齐 */ TString tsv; } UTString; TString结构是Lua中表示字符串的主体结构。UTString 结构主要是为了确保TString结构占用固定大小的内存区域,以便计算实际字符串存储的位置。
lua_pushstring(L, “mystr”) // 压入一个字符串 存入栈的数据类型包括数值, 字符串, 指针, talbe, 闭包等。 压入的值在C看来是不同类型的,在lua看来都是TValue结构。 typedefstructlua_TValue{ Value value; inttt } TValue; /* ** Union of all Lua values ...
TString结构体 我们平时在 lua 中使用到的字符串,在底层对应的数据结构是长什么样的,抱着好奇的心态去了解下。我们先写个最简单的字符串赋值语句 localname ="zhangsan" 接着看看这行代码对应的指令: main <tc.lua:0,0> (2instructions at00000000006c8490) ...
Lua中的数值默认是double类型的,要压入整数的时候用lua_pushinteger Lua的string不是0字符结尾的,它可以包含任意二进制数据 交互栈至少有20个槽位,这定义在lua.h中的LUA_MINSTACK 检查栈的槽位是否够用: int lua_checkstack (lua_State *L, int sz); ...
lua_pushliteral# [-0, +1, e] const char *lua_pushliteral (lua_State *L, const char *s); 这个宏等价于 lua_pushstring, 区别仅在于只能在 s 是一个字面量时才能用它。 它会自动给出字符串的长度。 lua_pushlstring# [-0, +1, e] const char *lua_pushlstring (lua_State *L, const ch...