Lua变量对速度与内存的影响及赋值内存消耗疑问
Lua 值类型与引用类型的内存及性能问题解答
1. 数值类型赋值的内存消耗
执行local x = 5后local y = x,不会占用双倍内存。Lua对小整数(通常是-253到253范围内的整数)和常用字符串做了常量池复用,x和y其实指向同一个内部常量,只是多了一个局部变量的引用,内存开销只是这个局部变量的存储位(几个字节),完全可以忽略。
2. 表类型赋值的内存消耗
执行local myTab = { one = "hello" }后local myTab2 = myTab,确实是两个变量指向同一张表,赋值操作不会额外创建表的副本,只增加了一个引用计数,内存开销极小,就是局部变量本身的存储成本。
3. 全局变量转局部变量的内存与性能权衡
你把全局变量Config转成局部变量的操作,几乎不会增加内存消耗,反而能显著提升性能:
- 内存层面:局部变量只是存储了全局变量的引用(对于表、函数这类引用类型)或者复用了常量(对于值类型),额外开销微乎其微;
- 性能层面:Lua访问局部变量的速度远快于全局变量——局部变量存在栈上,直接通过索引访问;全局变量需要从全局表
_G里做哈希查找,频繁访问时差异明显。
在大型程序中这种优化是推荐的,完全不用担心内存问题,其内存开销和性能收益相比可以忽略不计。
内容的提问来源于stack exchange,提问作者Mey
相关产品推荐
相关产品推荐

