lua assert collectgarbage

assert (v [, message])

断言,主要是用来输出错误当v为false或nil时,message可选默认为assertion failed
当v为true时返回v,和message两个参数

例子

assert(1>10)
--输出如下
--[[
lua: tmp.lua:1: assertion failed!
stack traceback:
	[C]: in function 'assert'
	tmp.lua:1: in main chunk
	[C]: ?
--]]


collectgarbage ([opt [, arg]])

垃圾回收,除了c/c++等语言,一般不需要手动释放内存编程语言都具备垃圾回收功能来避免内存耗尽,lua中的collectgarbage函数是给用户来手动控制垃圾回收,一般情况下建议不要手动调用,因为lua会帮我们完成。

opt
"collect"       从头到尾走一遍垃圾回收流程.
"stop"          停止垃圾回收(如果正在进行)
"restart"       重新启动垃圾回收(如果已经停止)
"count"         返回lua吃掉的内存(单位K)
"step"           执行垃圾回收步骤,大小由arg参数决定(越大代表步骤越多,不特定),如果你想控制步骤大小,你必须传不同的arg来试验,当返回true时表示回收完成
"setpause"   把传入的参数arg设置为新的收集器的暂停值,返回老的暂停值
"setstepmul" 把传入的参数arg设置为新的收集器的倍增值,返回之前的步骤值

例子

local url = 'www.freecls.com'

local mem_use = collectgarbage('count')
print(mem_use)      --28.9345703125

local t = {}
for i=1,1000 do
    table.insert(t,i)
end

local mem_use = collectgarbage('count')
print(mem_use)      --45.0341796875

--手动回收内存,
collectgarbage('collect')

--这时候t这个表格还没有释放,所以回收不了多少
local mem_use = collectgarbage('count')
print(mem_use)      --43.267578125

t = nil

--手动回收内存
collectgarbage('collect')

--由于t为nil所以回收器会回收之前t所占用的内存
--所以内存又回到了初始的时候的大小
local mem_use = collectgarbage('count')
print(mem_use)      --27.205078125


上一篇: lua require模块加载机制
下一篇: lua 基本函数dofile loadfile loadstring
作者邮箱: 203328517@qq.com