2009年9月15日 星期二

C++ auto pointer

相信許多寫C/C++語言的人一定都用過指標
C/C++指標很強大很好用
但使用時必須很小心
因為動不動就忘了將指標回收而造成了memory leak
或是不小心回收了卻又去存取指標造成系統crash
我們舉幾個例子好了

1.Dangling pointer
MyObject *A = new MyObject();
MyObject *B = A;
A->callMethod();
delete A; // free memory
A = NULL; // pointer to NULL to prevent access wrong memory address
B->callMethod(); //dangling pointer , system may crash

B指標指向一個可能已經被系統回收的記憶體
一般程式設計師會用以下的code來判斷這個指標是否可以被使用
if ( B != NULL )
B->callMethod();
但很顯然的B指標非NULL
它只是指向一個垃圾位址而已
你無法保證程式這樣執行一定正確而且不會crash

2.Exception發生
MyObject *A = NULL;
try{
A = new MyObject();
A->callMethod(); // exception may happen
delete A;
}
catch(..)
{
//error handle
如果你沒在這裡明確delete a,那一定memory leak
// delete A;
}

用C++的auto pointer不用害怕memory leak和dangling pointer
你只需要負責new你的記憶體就好
不需要要delete它
系統會自動回收不用的記憶體
例如

auto_ptr A( new MyObject() );
auto_ptr B = A;
auto_ptr C = A;
A->callMethod();
B->callMethod();
C->callMethod();

如果A記憶體被回收了
那B,C一定會是NULL
所以不會有dangling pointer的問題
如果允許使用auto pointer的話就儘量使用
可以提高系統的穩定度以及可靠度
你不用在茫茫code海中找到底那段code造成memory leak了

2009年9月10日 星期四

Wii&NGC combo 模擬器

相信有在玩模擬器的朋友們都知道,最近最Hot的模擬器之一就是Dolphin。這個模擬器當初只為了模擬NGC,
現在卻連Wii也模擬了,而且執行的效率還不錯。Dolphin模擬自從原始作者Open Source之後吸引了許多開發者
的參與,更新速度簡直像是用飛的一樣,短短的幾個月,已經更新到的r4247版(意指Project被開啟到至今修改過
了4247次),目前的更新速度依然相當快速,而且也不乏許多高手加入此Project(例如1964的作者),他在Google
上的Project專區也是相當的熱鬧,有興趣的人可以去看看。
Dolphin Project

順便貼上幾個他執行的影片
Wii版薩爾達傳說-曙光公主


NGC-薩爾達傳說-風之律動


Wii-任天堂明星大亂鬥(用Xbox360手把)

NDS模擬器Desmume

NDS模擬器出來很久了,但是很多都停止開發了,當初最紅的NO$GBA作者都不知道跑那去了,
現在唯一還有更新的是這個Open Source Project。老實說Desmume初期真的不怎樣,
但現在他的相容性和速度都有一定的水準,是一個可以期待的模擬器,如果有人想試試的話
可以去他的官網下載(但不會是最新的)
Desmume Project

如果想要用最新的非官方Release
你可以去以下網站下載
Emu svn daily build

順便貼上0.9.4+版運行的結果


王國之心