计算机程序开发中有哪些逻辑的函数呢?

计算机程序开发中有哪些逻辑的函数呢?,第1张

函数有很多,比如字符串拼接函数,分割函数,打乱函数等。

1.确保堆栈上至少有 n 个额外空位。 如果不能把堆栈扩展到相应的尺寸,函数返回假。 失败的原因包括将把栈扩展到比固定最大尺寸还大 (至少是几千个元素)或分配内存失败。 这个函数永远不会缩小堆栈; 如果堆栈已经比需要的大了,那么就保持原样。

lu a_close

[-0, +0, –]

void lua_close (lu a_State *L)

2.销毁指定 Lua 状态机中的所有对象 (如果有垃圾收亩穗集相关的元方法的话,会调用它们), 并且释放状态机中使用的所有动态内存。 在一些平台上,你可以不必调用这个函数, 因为当宿主程序结束的时候,所有的资源就自然被释放掉了。 另一方面,长期运行的程序,比如一个后台程序或是一个网站服务器, 会创建出多个 Lua 状态机。那么就应该在不需要时赶紧关闭它们。

lu a_compare

[-0, +0, e]

int lu a_compare (lua_State *L, int index1, int index2, int op)

比较两个 Lua 值。 当索引 index1 处的值通过 op 和索引 index2 处的值做比较后条件满足,函数返回 1 。 这个函数遵循 Lua 对应的 *** 作规则(即有可能触发元方法)。 反之,函数返回 0。 当任何一个索引无效时,函数也会返回 0 。

op 值必须是下列常量中的一个:

LUA_OPEQ: 相等比较 (==)

LUA_OPLT: 小于比较 (<)

LUA_OPLE: 小于等于比较 (<=)

lua_concat

[-n, +1, e]

void l ua_concat (lua_State *L, int n)

3.连接栈顶的 n 个值, 然后将这些值出栈,并把结果放在栈顶。 如果 n 为 1 ,结果就是那个值放在栈上(即,函数什么都不做); 如果 n 为 0 ,结果是一个空串。 连接依照 Lua 中通常语义完成()。

lua_copy

[-0, +0, –]

void lu a_copy (lua_State *L, int fromidx, int toidx)

从索引 fromidx 处复制一个值到一个有效索引 toidx 处,覆盖那里的原有值。 不会影响其它位置的值。

l ua_createtable

[-0, +1, e]

void l ua_createtable (lua_State *L, int narr, int nrec)

4.创建一张新的空表压栈。 参数 narr 建议了这张表作为序列使用时会有多弯纯少个元素; 参数 nrec 建议了这张表可能拥有多少序列之外的元素。 Lua 会使用这些建议来预分配这张新表。 如果你知道这张表用途的更多信息,预分配可以提高性能。 否则,你可以使用函数 lua_newtable 。

lua_dump

[-0, +0, e]

int lu a_dump (lua_State *L,

lua_Writer writer,

void *data,

int strip)

把函数导出成二进制代码块 。 函数接收栈顶的 Lu a 函埋耐咐数做参数, 然后生成它的二进制代码块。 若被导出的东西被再次加载, 加载的结果就相当于原来的函数。 当它在产生代码块的时候, lua_dump 通过调用函数 writer (r ) 来写入数据,后面的 data 参数会被传入 writer 。

5.如果 strip 为真, 二进制代码块将不包含该函数的调试信息。

最后一次由 writer 的返回值将作为这个函数的返回值返回; 0 表示没有错误。

该函数不会把 Lua 函数d出堆栈。

系统给我们提供了很多常用的函数,比如日期函数,文件函数,字符串函数,xyk函数等,下面是常见的一些函数。

1.创建一条新线程,并将其压栈, 并返回维护这个线程的 lu a_State 指针。 这个函数返回的新线程共享原线程的全局环境, 但是它有独立的运行栈。

没有显式的函数可以用来关闭或销毁掉一个线程。 线程跟其它 L ua 对象一样是垃圾收集的条目之一。

2.创建一个运行在新的独立的状态机中的线程。 如果无法创建线程或状态机(由于滑岁内存有限)则返回 NULL。 参数 f 是一个分配器函数; L ua 将通过这个函数做状态机内所有的内存分配 *** 作。 第二个参数 ud ,这个指针将在每次调用分配器时被转入。

3.这个函数分配一块指定大小的内存块, 把内存块地址作为一个完全用户数据压栈, 并返回这个地址。 宿主程序可以随意使用这块内存。

4.将一个 L ua 浮点数转换为一个 L ua 整数。 这个宏假设 n 有对应的整数值。 如果该值在 L ua 整数可表示范围内, 就将其转换为一个整察行数赋给 *p。 宏的结果是一个布尔量,表示转换是否成功。 (注意、由于圆整关系,这个范围测试不用此宏很难做对。)

该宏有可能对其参数做多次取值。

5.用户数据是保留在 Lu a 中的 C 值。 轻量用户数据 表示一个指针 void*。 它是一个像数字一样的值: 你不需要专门创建它,它也没有独立的元表,而且也不会被收集(因为从来不需要创建)。 只要表示的 C 地址相同,两个轻量用户数据就相等。

6.这个宏等价于 lua_pushlstring, 区别仅在于只能在 s 是一个字面量时才能用它。 它会自动给出字符串的长度。

lu a_pushlstring

const char *lua_pushlstring (lua_State *L, const char *s, size_t len)

7.把指针 s 指向的长度为 len 的字符串压栈。 Lua 对这个字符串信没睁做一个内部副本(或是复用一个副本), 因此 s 处的内存在函数返回后,可以释放掉或是立刻重用于其它用途。 字符串内可以是任意二进制数据,包括零字符。

返回内部副本的指针。

8.返回给定索引处值的固有“长度”: 对于字符串,它指字符串的长度; 对于表;它指不触发元方法的情况下取长度 *** 作('#')应得到的值; 对于用户数据,它指为该用户数据分配的内存块的大小; 对于其它值,它为 0 。

它也没有独立的元表,而且也不会被收集(因为从来不需要创建)。 只要表示的 C 地址相同,两个轻量用户数据就相等。Lua 对这个字符串做一个内部副本(或是复用一个副本), 因此 s 处的内存在函数返回后,可以释放掉或是立刻重用于其它用途。 字符串内可以是任意二进制数据,包括零字符。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12430229.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存