DirectX9のプログラムを触っていてふと疑問に思ったのですが、
DirectX9のプログラムではアプリケーションの終了時にLPDIRECT3DDEVICE9変数などを解放しますよね。
これは手元の本によるとメモリリークを防ぐためのものと書かれていますが、
調べてみると最近のOSならばアプリケーションごとにメモリが確保されていて、アプリケーションが終了した時点でそのメモリは全て自動で解放されるという情報も見られました。
ということは、今は上記のLPDIRECT3DDEVICE9変数のような、アプリケーションの終了時にしか解放のタイミングが考えられないようなオブジェクトはわざわざ解放処理を書かなくても問題ないのでしょうか?
オブジェクトの解放について
Re: オブジェクトの解放について
オブジェクトの解放で解放されるのはメモリだけではありません。skn さんが書きました:DirectX9のプログラムではアプリケーションの終了時にLPDIRECT3DDEVICE9変数などを解放しますよね。
これは手元の本によるとメモリリークを防ぐためのものと書かれていますが、
調べてみると最近のOSならばアプリケーションごとにメモリが確保されていて、アプリケーションが終了した時点でそのメモリは全て自動で解放されるという情報も見られました。
ということは、今は上記のLPDIRECT3DDEVICE9変数のような、アプリケーションの終了時にしか解放のタイミングが考えられないようなオブジェクトはわざわざ解放処理を書かなくても問題ないのでしょうか?
各種の共有資源へのアクセス権も解放されます。
また,解放処理の際に終了処理が行われる可能性があります。
その上で個々のオブジェクトについて書くならば,ローカルのグラフィクスデバイスであれば,おそらく正しく解放されているのと同じ状況が作り出されると思います。
オフトピック
バグその他により不正終了した場合に,デバイスを確保し続けては大きな問題になるため
- 独自のバッファを持ったファイルオブジェクトに書き込んだデータが正しく出力されない
- ネットワーク上のプロトコルで,正規の終了が通知されないためにタイムアウトまで無意味にサーバーリソースを確保し続ける
このため,すべてのオブジェクトを終了時には正しく解放する,というのが間違いない方法となります。
オフトピック
このオブジェクトは終了処理があるから解放が必要,このオブジェクトはないから不要,というような,場合によっては実装に依存してしまうような調査が不要になるため