lua assert collectgarbage

2018-05-10 11:54:39

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


总结

1.本文只是对断言,垃圾回收做简单的介绍,如果有疑问可以给我留言
2.lua的版本为5.1,运行环境centos7 64位
3.原文地址http://www.freecls.com/a/2712/14

©著作权归作者所有
收藏
推荐阅读
  • lua require模块加载机制

    调用模块步骤当我们调用require "modname"1.会去检查package.loaded表格是否已经加载过,如果已经加载过直接返回,所以重复加载同一个模块多次只会加载1次2.如果package...

  • err
    lua os(操作系统)库

    lua os库提供了简单的跟操作系统有关的功能os.clock()返回当前当前cpu使用的秒数例子--用来计算中间的遍历花费了多少cpu时间 local x = os.c...

  • err
    lua io库(输入输出)

    lua io库提供了2种模式来文件处理1.简单模式-所有操作会在2个当前文件(默认为标准输入stdin,标准输出stdout)2.完全模式-基于文件句柄,功能丰富一点简单...

  • lua数组表格处理(table库用法)

    table库由一些基本函数组成来以数组的形式(也就是只能处理数字下标的元素)处理表格包括插入移除排序连接所有元素为字符串table.insert (table, [pos,] value)插入数据,p...

  • lua字符串处理(string库用法)

    lua的string库是用来处理字符串的,基础函数如下string.byte(s [, i [, j]])string.byte是用来把字符转换成ascii数字,s为目标字符串,i为索引开始位置(从1...

  • nginx模块 ngx_http_headers_module

    ngx_http_headers_module 模块是用来增加 Expires 和 Cache-control,或者是任意的响应头。Syntax: add_header name value [alw...

  • nginx模块 ngx_http_gunzip_module、ngx_http_gzip_module、ngx_http_gzip_static_module

    ngx_http_gunzip_module 模块将文件解压缩后并在响应头加上 "Content-Encoding: gzip" 返回给客户端。为了解决客户端不支持gzip压缩。编译的时候带上 --w...

  • nginx模块 ngx_http_flv_module、ngx_http_mp4_module

    ngx_http_flv_module模块提供了对 flv 视频的伪流支持。编译的时候带上 --with-http_flv_module。它会根据指定的 start 参数来指定跳过多少字节,并在返回数...

  • nginx模块 ngx_http_fastcgi_module

    ngx_http_fastcgi_module 模块使得nginx可以与 fastcgi 服务器通信。比如目前要使得 nginx 支持 php 就得使用 fastcgi技术,在服务器上装上 nginx...

  • nginx模块 ngx_http_autoindex_module

    ngx_http_autoindex_module 模块可以将uri以 / 结尾时,列出里面的文件和目录。Syntax: autoindex on | off; Default: autoindex ...

简介
天降大任于斯人也,必先苦其心志。