国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

在Lua中管理C對(duì)象

開發(fā) 前端
今天同事在設(shè)計(jì)引擎的腳本接口時(shí)遇到一個(gè)問題:需要把 C 對(duì)象指針放到 Lua 中,允許 Lua 保存這個(gè)指針,并傳遞給其它模塊。

今天同事在設(shè)計(jì)引擎的腳本接口時(shí)遇到一個(gè)問題:需要把 C 對(duì)象指針放到 Lua 中,允許 Lua 保存這個(gè)指針,并傳遞給其它模塊。 這是給 Lua 寫 C 擴(kuò)展時(shí)常見的問題,撇開如何如何將對(duì)象的方法導(dǎo)入 Lua 這個(gè)更復(fù)雜的問題不談,我主要想說(shuō)說(shuō) C 對(duì)象的生命期管理的問題。 一開始的設(shè)計(jì)是把對(duì)象的銷毀方法也導(dǎo)入 Lua ,由腳本程序員手工管理。這是很明顯的 C 程序員的思路:誰(shuí)構(gòu)造誰(shuí)釋放。但在這里是不合適的,不符合帶 gc 機(jī)制語(yǔ)言的習(xí)慣。 ... Click to expand...

今天同事在設(shè)計(jì)引擎的腳本接口時(shí)遇到一個(gè)問題:需要把 C 對(duì)象指針放到 Lua 中,允許 Lua 保存這個(gè)指針,并傳遞給其它模塊。

這是給 Lua 寫 C 擴(kuò)展時(shí)常見的問題,撇開如何如何將對(duì)象的方法導(dǎo)入 Lua 這個(gè)更復(fù)雜的問題不談,我主要想說(shuō)說(shuō) C 對(duì)象的生命期管理的問題。

一開始的設(shè)計(jì)是把對(duì)象的銷毀方法也導(dǎo)入 Lua ,由腳本程序員手工管理。這是很明顯的 C 程序員的思路:誰(shuí)構(gòu)造誰(shuí)釋放。但在這里是不合適的,不符合帶 gc 機(jī)制語(yǔ)言的習(xí)慣。

我們當(dāng)然希望腳本更為健壯,不需要考慮對(duì)象釋放的問題。所以晚上我想了一下,修改了一下這部分的實(shí)現(xiàn)。

從效率方面著手,這個(gè)問題分兩種情況:

***種情況很簡(jiǎn)單,C 對(duì)象可以被傳入 Lua 狀態(tài)機(jī)后,邏輯上可以確保它的指針一定一直有效,程序直到 Lua 狀態(tài)機(jī)本身關(guān)閉后,才會(huì)刪除對(duì)象。這種情況我們只需要把 C 對(duì)象指針以 lightuserdata 的形式壓入堆棧即可。

第二種情況就是,C 對(duì)象由腳本創(chuàng)建或獲得。在沒有地方對(duì)其引用之后,對(duì)象則應(yīng)該被刪除以釋放其占用的資源。這種情況,我們應(yīng)該使用 fulluserdata ,為其注冊(cè) gc 元方法。

不過問題復(fù)雜在,引用 C 對(duì)象的可以是腳本也可以在 C 代碼中。腳本中對(duì) userdata 的引用 lua 狀態(tài)機(jī)會(huì)自行解決,但 lua 的 gc 過程并不能直接知道 C 中是否對(duì)對(duì)象還有引用,這就是我們需要做的工作了。

python 的 C 接口提供了相關(guān)的函數(shù),可以在 C 界面上對(duì) PyObject 加減引用。但是 lua 的 gc 是基于根掃描的,狀態(tài)機(jī)中并沒有引用計(jì)數(shù)。很自然的,lua 就沒有類似的 C 接口了。

我的解決方法是,在 lua 注冊(cè)表中創(chuàng)建一個(gè)弱表(value 是弱的,而 key 是強(qiáng)的),把 C 對(duì)象指針和對(duì)應(yīng)的 fulluserdata 以及它在 C 中的引用數(shù)量記入這個(gè)表里。然后提供一對(duì) API 對(duì)引用計(jì)數(shù)增減。當(dāng)引用計(jì)數(shù)為 0 時(shí),清除關(guān)于計(jì)數(shù)的表項(xiàng)。最終可利用 gc 回收掉已無(wú)引用的 C 對(duì)象。

詳細(xì)的程序可以參考我的 wiki 上貼的代碼。

這里補(bǔ)充幾點(diǎn)說(shuō)明:

所有對(duì)象的 gc 元方法是共享的,而不是每次創(chuàng)建 fulluserdata 創(chuàng)建一個(gè)新的元表。這是一個(gè)簡(jiǎn)單的優(yōu)化,可以節(jié)省不少的內(nèi)存。方便起見,這個(gè)元表也放在那個(gè)弱表內(nèi)。注意:在 Lua 中,每次壓入一個(gè) CFucntion 都會(huì)重新分配內(nèi)存創(chuàng)建一個(gè)新對(duì)象。所以應(yīng)該盡可能的共用。

每次從 C 對(duì)象指針生成 fulluserdata 時(shí),都會(huì)去檢查以前是否生成過。這樣才能使引用計(jì)數(shù)統(tǒng)一計(jì)算。

代碼隨手寫的,并沒有經(jīng)過嚴(yán)格的測(cè)試,如果誰(shuí)想拿去用可自便,但發(fā)現(xiàn) bug 請(qǐng)通知我修改過來(lái)。

原文鏈接:http://tech.it168.com/j/2008-02-17/200802171052983.shtml

責(zé)任編輯:陳四芳 來(lái)源: 來(lái)自ITPUB論壇
相關(guān)推薦

2011-08-22 17:13:00

LuaC++函數(shù)

2011-08-24 13:56:12

Lua游戲

2011-08-29 09:54:45

LUAJAVA 方法

2011-08-23 16:59:16

C++LUA腳本LUA API

2011-08-25 15:35:18

Lua游戲對(duì)象

2021-06-03 10:00:47

JavaScript 前端數(shù)克隆對(duì)象

2009-08-03 11:32:49

C#調(diào)用COM對(duì)象

2013-12-13 16:53:00

Lua腳本語(yǔ)言C++

2011-08-31 17:58:00

VS.netLUA開發(fā)環(huán)境

2011-08-24 13:27:07

Lua 游戲C接口腳本

2013-12-12 16:37:12

Lua腳本語(yǔ)言

2022-04-29 07:35:49

SpringMVC構(gòu)造函數(shù)

2015-06-10 10:04:09

反向代理服務(wù)釣魚

2013-12-13 17:21:14

Lua腳本語(yǔ)言

2010-01-27 14:00:50

CC++運(yùn)行環(huán)境

2013-12-13 16:46:18

Lua腳本語(yǔ)言

2011-08-23 17:11:13

Lua事件C#

2009-05-08 09:46:37

微軟C#集合對(duì)象

2009-07-01 09:17:36

對(duì)象比較Java

2009-08-20 10:34:46

C#中聲明API函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

成人午夜激情视频| 青草青青在线视频| 亚洲伦理网站| 国产精品麻豆久久久| 午夜精品一区二区三区在线视频 | 亚洲一区二区电影| 亚洲国产成人精品电影| av网站免费在线| 最好看的中文字幕久久| 久久青草视频| 久久先锋影音av鲁色资源网| 日韩色妇久久av| 欧美日一区二区三区在线观看国产免| 欧美人与性动交| 国产精品伦理| 亚洲精品aⅴ中文字幕乱码| 久草在线青青草| 亚洲成人av一区二区三区| 国产高清不卡一区二区| 成人av免费在线看| 国产一区二区三区四区五区传媒 | 自拍偷拍亚洲视频| 精品国产一区久久| 影音先锋男人资源在线| 精品三级在线观看| 99爱在线视频| 日韩精品在线观看一区| 成人黄页网站视频| 欧美另类xxx| 国产精品毛片av| 国产精品成久久久久三级| 美女网站在线| 亚洲3atv精品一区二区三区| 在线国产三级| 欧美体内she精视频| 美女av在线播放| 国产成人免费在线视频| 精品人妻大屁股白浆无码| 国产jizzjizz一区二区| aa在线观看视频| 欧美日韩在线二区| 91最新在线免费观看| 国内精品久久久久久久影视麻豆 | 欧美性猛交xxxx黑人猛交| 天堂中文在线资| 69av一区二区三区| 僵尸再翻生在线观看免费国语| 亚洲天堂av图片| 超碰在线成人| 96国产粉嫩美女| 日韩电影在线观看电影| 天堂а√在线中文在线 | 国产乱人伦精品一区| 国产精品6699| 免费欧美日韩| 岛国大片在线播放| 亚洲一区影音先锋| 99福利在线| 美女撒尿一区二区三区| 999视频精品| 神马影院我不卡午夜| 97超碰欧美中文字幕| 中文字幕在线资源| 久久精品99国产精品| 国产v亚洲v天堂无码久久久 | 欧美日韩电影一区二区| 国产69精品久久777的优势| 国产对白国语对白| 欧美天堂一区二区三区| 欧美大片免费观看网址| 欧美中文字幕视频| 激情国产在线| 午夜精品在线视频| 噜噜噜躁狠狠躁狠狠精品视频 | 一本久久综合| 午夜精品久久久久久久无码 | 免费观看羞羞视频网站| 欧美精品一区二区久久婷婷| 久久精品国产亚洲5555| 日本一区二区三区免费观看| 日韩一区在线免费观看| 日本在线视频网址| 55夜色66夜色国产精品视频| 免费视频最近日韩| 国产传媒视频在线观看| 中文国产成人精品久久一| 亚洲性色视频| 99视频资源网| 亚洲人成网站免费播放| 亚洲深深色噜噜狠狠爱网站| 茄子视频成人免费观看| 精品国产一区二区精华| 香蕉av一区二区| 亚洲天堂网一区| 国产午夜精品理论片a级探花| 亚洲激情中文在线| 国产精品视频中文字幕| 日韩成人在线视频网站| 欧美日韩少妇| 女人裸体免费网站| 久久精品国产精品| 蜜桃av一区二区三区电影| 三级视频网站在线| 亚洲人精品一区| 日本精品在线一区| 日本高清视频一区二区三区| 亚洲一二三四久久| 久草在线综合| 欧美变态另类刺激| 亚洲高清av在线| aa级大片欧美三级| 你懂得网站在线| 欧美日韩一级二级三级| 国产探花在线精品| 三级视频中文字幕| 日韩在线观看免费高清| 日本中文字幕一区二区有限公司| 亚洲精品在线不卡| 精品一区二区三区中文字幕老牛 | 女人被爽到呻吟gif动态图下载| 视频在线观看99| 奇米在线7777在线精品| 一区二区三区视频网站| 国产精品第一页在线| 亚洲free性xxxx护士hd| 精品国产一区二区三区在线观看 | 国产成人一区二| 欧美亚洲大陆| www.69av| 国产噜噜噜噜噜久久久久久久久 | 黄色av网站在线免费观看| 日韩大胆视频| 中文字幕剧情在线观看一区| 亚洲精品自拍第一页| 日韩在线综合| 日本福利在线| 深夜福利一区二区| 成人网在线播放| 日本美女久久| 97国产精东麻豆人妻电影| 久久亚洲春色中文字幕| 久久你懂得1024| 超碰人人在线| 99久久激情视频| 人人妻人人澡人人爽欧美一区| 国产精品久久久久久久天堂| 欧美一级二级在线观看| 中文字幕中文字幕在线一区 | 欧美激情一区二区三区蜜桃视频 | 国产老肥熟一区二区三区| 国产精品久久中文字幕| 亚洲香蕉成视频在线观看| 成人中文字幕合集| 国产精品传媒麻豆hd| 无码人妻丰满熟妇区毛片18| 久久久久久成人| 亚洲一二三级电影| 欧美日韩一区二区三区四区在线观看| 国产系列在线观看| 一本一本a久久| 欧美大胆a视频| 色综合天天视频在线观看| 久久精品国产一区二区| 高清国产一区二区三区四区五区| 日本搞黄视频| 欧美日韩在线观看一区二区三区 | 91视频你懂的| 日韩亚洲一区在线| 性欧美1819sex性高清大胸| 亚洲一区免费视频| av一区二区高清| 麻豆最新免费在线视频| 日本中文字幕网址| 日韩免费av片在线观看| 欧美在线免费观看视频| 国产xxx精品视频大全| 天堂综合网久久| 麻豆av在线导航| 草草久久久无码国产专区| 成人高h视频在线| 亚洲欧美国产日韩中文字幕| 亚洲男人天堂av| 丝袜美腿成人在线| 香蕉久久夜色精品国产使用方法| 蝌蚪视频在线播放| 国产免费色视频| 国产福利成人在线| 日韩一区二区三区在线| 久久亚洲春色中文字幕久久久| 国产精品久久久久久久久妇女| 9999精品成人免费毛片在线看 | 久久99精品国产91久久来源| 成人搞黄视频| 里番在线观看网站| 午夜网站在线观看| 色婷婷777777仙踪林| 国产精品久久久久久久天堂| 国产香蕉一区二区三区在线视频| 精品色蜜蜜精品视频在线观看| aaa亚洲精品|