windows的世界

windows程序开发

C++博客 首页 新随笔 联系 聚合 管理
  0 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks
re: 垃圾收集的那点事(K) 云风 2009-03-09 15:23
Q:为啥非要主动遍历弱表才能这样呢。。。。

A:呵呵,因为 id 得保留,不然新分配的内存块分配出来的 id 可能和弱表里记录的重复。这样从弱表里就可能取到和当初放进去不同的内存指针了。关键是在于,回收一块内存时,无法反查到内存被哪些弱表引用着。
lua 有个很重要的概念叫做环境,可以解决你的这个问题:
"虽然可以dofile,但是其dofile内声明的变量必须是globle的,因为local value的生存范围是chunk"


另外,lua 可以实现比较方便的 module 机制,官方提供的也是个不错的方案。赤裸裸的调用 dofile 如今并不被提倡。

closure 也是动态语言中相对 C 非常强的工具,所以
{func=print, param="unsuccess"} 这样的写法有较强的 C 编程风格的痕迹,通常 lua 中会用一个 closure 来实现吧。