2007年3月30日 星期五

(書名)遊戲之旅-我的程式設計感悟 - 組合語言優化 part1

遊戲之旅-我的程式設計感悟
作者為大陸人雲風
此書的內容在於作者寫遊戲之來的心得及技術經驗
對於遊戲設計初心者來說是蠻不錯的一本書
有興趣的人可以去找來看看~

題外話:淡江的圖書館真的蠻好的~ 這本書也算是蠻新的一本 我是第一個借閱的.. XD

來談談此一章節前面的心得吧
6.2.2 低效率的靜態變數
對於靜態變數及區域變數 你認為哪一個的效率會比較好?
或許有人認為區域變數在用到時才被分配出來
而靜態變數是一開始就分配好的 理所當然靜態變數的效率較好
當然這個想法是錯誤的
區域變數是存在系統堆疊上的 在分配上僅僅是一行指令(修改esp暫存器)即可實現
(一組區域變數的宣告只做一次 而非一個變數一次)
將變數放在堆疊中 其最大的好處是 函數能夠重複使用記憶体
在目前的函式退出後,記憶体空間被回收,又再進入新的函式時
又會再次使用相同位址的記憶体
而當同一塊的記憶体被使用時,修過OS的人就知道
其資料會被存放到CPU的L1 cache中,所以存取的速度相當快
在大部分的情況之下,存取堆疊頂部的資料都符合此一條件
相較之下靜態變數就沒有此一優點。
在CPU與MEM做交換資料的同時,往往成為程式的速度瓶頸。

同樣的道理,臨時建構一個物件,如果使用系統提供的new operator
則會間接呼叫了malloc而導致較低效率的操作
較好的方法則是使用placement new,而改用alloca在堆疊中分配物件所需的空間
並且在退出函式時直接呼叫物件的解構子 而非使用delete
使函式在退出時的堆疊操作自動回收記憶體

總之 不論在設計角度或是在於效率角度 靜態變數的使用應該僅量避免

這一篇就到這邊結尾吧~~

業餘MMORPG開發團隊

發起人為moremusic大大
遊戲設計經驗豐富 曾經開發過許多單機遊戲及一未上市Online Game
發起後也得到重大迴響 目前加入人數接近十人
雖然在遊戲設計上我還是個小咖 但仍然加入了team
希望在此開發團隊中能夠與大家一起學習成長
這也是追逐夢想的一步吧~ XD
有興趣設計遊戲的人可以一起加入~ :D

論壇網址
http://88.freebb.com/mmoframeworkd/mmoframeworkd.html

How's blog開張大吉

為何突然想要開一個blog來寫東西咧
主要大概是因為這幾天好像什麼事都沒做
想一想... 從考上之後好像就少了一點什麼東西...
雖然 這段時間也是有看了點書.. 寫了點程式
但是還是沒啥動力的感覺... 於是就弄個Blog來增加自己學習的一些動力吧...囧