ページ 11

自分で開放しなければならないものとは?

Posted: 2012年12月24日(月) 18:03
by atori
最近ゲームを作っていく上で、作ったデータを自分の手で、必要なタイミングで開放しなければならないという処理が出てきました。

作ったものを開放しないとメモリリークが起きる。これはわかるのですが、開放という概念がない段階でも、
当然のことながら変数などを定義し、データを作っています。それらは定義したブロックの外に出ると自動で開放されると思います。

そこで疑問なのが、自分の手で開放しなければならないデータと機械が勝手に開放してくれるデータの違いとは一体何なのでしょうか?

Re: 自分で開放しなければならないものとは?

Posted: 2012年12月24日(月) 18:12
by h2so5
メモリの「開放」ではなく「解放」が正しい使い方です。

基本的に malloc や new で動的確保したメモリ領域は、
スマートポインタやGCの管理下になければ手動で解放する必要があります。

それ以外の、画像データやソケットなどAPI経由で作成されたリソースを手動で解放すべきかどうかは、
APIのリファレンスに書かれているはずです。

Re: 自分で開放しなければならないものとは?

Posted: 2012年12月24日(月) 18:19
by softya(ソフト屋)
特別な解放の仕掛けなしに、自分で動的(mallocやnew)にメモリを確保しているか、内部で動的にメモリを確保している可能性があるライブラリを利用している場合は解放する必要があります。
画像、モデル、音楽などロードするものは基本的に解放する必要があると思ってください。あとハンドルがあるものも大抵は解放を必要とします。
ただし、プログラム終了まで確保しっぱなしで良いのならDXライブラリ関係なら終了時に自動で解放されますし、Win32APIやC言語の標準関数でも解放されるものもあります。

Re: 自分で開放しなければならないものとは?

Posted: 2012年12月24日(月) 20:14
by atori
>>h2so5さん、softyaさん

ありがとうございました。なんとなくですがわかりました。