lua的弱表(weak table)简介
变量和值的区别
变量是值的载体,变量消失,值却不一定消失
object
Tables, functions, threads, and (full) userdata values are objects: variables do not actually contain these values, only references to them. Assignment, parameter passing, and function returns always manipulate references to such values; these operations do not imply any kind of copy.
垃圾回收
能够被回收的对象包括:All memory used by Lua is subject to automatic management: tables, userdata, functions, threads, strings, etc.
强引用,弱引用
在没有引入弱表前,所有对象引用皆为强引用。当对象没有任何引用或仅为弱引用时,对象被回收(lua执行collectgarbage,c执行lua_gc)
弱表(weak table)
一个表是弱表,仅当
1. 该表有一个元表
2. 元表有成员__mode
3. __mode的取值为"k"或"v"或"kv",一次表示键是弱的,值是弱的或者键值都是弱的
要注意,只有对象才可以从一个weak table中被收集。比如数字和布尔值类型的值,都是不会被收集的。例如,如果我们在table中插入了一个数值型的key,它将永远不会被收集器从table中移除。当然,如果对应于这个数值型key的vaule被收集,那么它的整个入口(keyvaluepair)将会从weak table中被移除。
关于字符串的一些细微差别:尽管字符串是可以被收集的,他们仍然跟其他可收集对象有所区别。 其他对象,比如tables和函数,他们都是显示的被创建。比如,不管什么时候当Lua遇到{}时,它建立了一个新的table。任何时候这个 function()。。。end建立了一个新的函数(实际上是一个闭包)。然而,Lua见到“a”..“b”的时候会创建一个新的字符串?如果系统中已经有一个字符串“ab”的话怎么办?Lua会重新建立一个新的?编译器可以在程序运行之前创建字符串么?这无关紧要:这些是实现的细节。因此,从程序员的角度来看,字符串是值而不是对象。所以,就像数值或布尔值,一个字符串不会从weak tables中被移除(除非它所关联的vaule被收集)。
弱值(weak value)
如果弱表的值是弱的,那么当值所引用的object被垃圾回收时,键值对也从弱表中移除
弱键(weak key)
如果弱表的键是弱的,那么当键所引用的object被垃圾回收时,键值对也从弱表中移除
相关内容
-
字符库快捷键|字符串快捷键
字符库快捷键|字符串快捷键,,1. 字符串快捷键1、单行注释单行...
-
电脑进水硬盘掉盘|电脑进水机械硬盘消失
电脑进水硬盘掉盘|电脑进水机械硬盘消失,,电脑进水机械硬盘消...
-
电脑硬盘csgo凭空消失|csgo突然消失
电脑硬盘csgo凭空消失|csgo突然消失,,1. csgo突然消失可能是系...
-
Win11怎么把任务栏调到左边?|win11任务栏图标消
Win11怎么把任务栏调到左边?|win11任务栏图标消失,任务栏, W...
-
神舟电脑找不到硬盘|神舟电脑机械硬盘消失了
神舟电脑找不到硬盘|神舟电脑机械硬盘消失了,,神舟电脑机械硬...
-
cad系统变量快捷键|cad修改快捷键命令大全
cad系统变量快捷键|cad修改快捷键命令大全,,1. cad修改快捷键...
-
Python之可迭代对象、迭代器、生成器
Python之可迭代对象、迭代器、生成器,迭代,生成器,一、概念描...
-
应用程序对象
应用程序对象,,应用程序对象是一个应用程序级对象,用于在所有用...
-
Win7桌面图标不见了怎么办 桌面图标消失只有名
Win7桌面图标不见了怎么办 桌面图标消失只有名字的解决办法,...
-
电脑上的硬盘简介|电脑磁盘介绍
电脑上的硬盘简介|电脑磁盘介绍,,1. 电脑磁盘介绍C盘,D盘,,E盘,F盘...
-
苹果计算机外设:挂盘工具简介
苹果计算机外设:挂盘工具简介,,通常,当我们使用苹果电脑时,我们经...
-
对象路径连接的快捷键|查找路径快捷键
对象路径连接的快捷键|查找路径快捷键,,1. 查找路径快捷键电脑...
-
电脑硬盘经常消失不见|电脑硬盘经常消失不见怎
电脑硬盘经常消失不见|电脑硬盘经常消失不见怎么办,,1. 电脑硬...
-
linux设置jdk环境变量|linux配置环境变量jdk
linux设置jdk环境变量|linux配置环境变量jdk,,1. linux配置环...
-
qq快捷键怎么消失|电脑qq的快捷方式弄没了怎么
qq快捷键怎么消失|电脑qq的快捷方式弄没了怎么出来,,1. 电脑qq...