lua基础assert和collectgarbage

1.assert(a,b)

当a为假(nil或false)时,返回b;当a为真,返回a的执行结果。

2.collectgarbage

collectgarbage("collect"): 做一次完整的垃圾收集循环。为默认参数。

collectgarbage("count"): 以 K 字节数为单位返回 Lua 使用的总内存数。 这个值有小数部分,所以只需要乘上 1024 就能得到 Lua 使用的准确字节数(除非溢出)。

collectgarbage("restart"): 重启垃圾收集器的自动运行。

collectgarbage("setpause"): 将 arg 设为收集器的 间歇率。 返回 间歇率 的前一个值。

collectgarbage("setstepmul"): 返回 步进倍率 的前一个值。

collectgarbage("step"): 单步运行垃圾收集器。 步长"大小"由 arg 控制。 传入 0 时,收集器步进(不可分割的)一步。 传入非 0 值, 收集器收集相当于 Lua 分配这些多(K 字节)内存的工作。 如果收集器结束一个循环将返回 true 。

collectgarbage("stop"): 停止垃圾收集器的运行。 在调用重启前,收集器只会因显式的调用运行。

static int luaB_collectgarbage (lua_State *L) {
  static const char *const opts[] = {"stop", "restart", "collect",
    "count", "step", "setpause", "setstepmul",
    "isrunning", NULL};
  static const int optsnum[] = {LUA_GCSTOP, LUA_GCRESTART, LUA_GCCOLLECT,
    LUA_GCCOUNT, LUA_GCSTEP, LUA_GCSETPAUSE, LUA_GCSETSTEPMUL,
    LUA_GCISRUNNING};
  int o = optsnum[luaL_checkoption(L, 1, "collect", opts)];
  int ex = (int)luaL_optinteger(L, 2, 0);
  int res = lua_gc(L, o, ex);
  switch (o) {
    case LUA_GCCOUNT: {
      int b = lua_gc(L, LUA_GCCOUNTB, 0);
      lua_pushnumber(L, (lua_Number)res + ((lua_Number)b/1024));
      return 1;
    }
    case LUA_GCSTEP: case LUA_GCISRUNNING: {
      lua_pushboolean(L, res);
      return 1;
    }
    default: {
      lua_pushinteger(L, res);
      return 1;
    }
  }
}

  

luaL_checkoption:参数检查功能。检查函数参数arg是否为字符串,并在数组中找到该字符串
luaL_optinteger:如果函数参数arg是整数(或可转换为整数),则返回该整数。如果该参数不存在或为nil,则返回。否则,将引发错误。
lua_gc:垃圾收集功能。有10种任务模式。

LUA_GCSTOP:停止垃圾收集器。

LUA_GCRESTART:重启垃圾收集器。

LUA_GCCOLLECT:执行一个完整的垃圾收集周期。

LUA_GCCOUNT:返回Lua当前使用的内存量(以千字节为单位)。

LUA_GCCOUNTB:返回Lua当前使用的内存字节数除以1024的余数。

LUA_GCSTEP:执行一个增量的垃圾收集步骤。

LUA_GCSETPAUSE:将data设置为收集器暂停的新值(参见§2.5),并返回之前的暂停值。

LUA_GCSETSTEPMUL:将data设置为收集器的步骤乘数的新值(参见§2.5),并返回步骤乘数的前一个值。

LUA_GCISRUNNING:返回一个布尔值,它告诉收集器是否正在运行(例如,没有停止)。

lua_pushnumber:释放指定大小的内存,并返回一个该内存的指针。
不难发现,这些函数有一个共同点,都是push,把对应的参数推到堆栈上,和资源回收相关的参数。lua_pushboolean,lua_pushinteger。

posted @ 2020-10-31 18:58  Smah  阅读(583)  评论(0编辑  收藏  举报