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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
atori
記事: 43
登録日時: 13年前

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

#1

投稿記事 by atori » 12年前

最近ゲームを作っていく上で、作ったデータを自分の手で、必要なタイミングで開放しなければならないという処理が出てきました。

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

そこで疑問なのが、自分の手で開放しなければならないデータと機械が勝手に開放してくれるデータの違いとは一体何なのでしょうか?
Done is better than perfect.(Mark Elliot Zuckerberg)

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 12年前

メモリの「開放」ではなく「解放」が正しい使い方です。

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

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

#3

投稿記事 by softya(ソフト屋) » 12年前

特別な解放の仕掛けなしに、自分で動的(mallocやnew)にメモリを確保しているか、内部で動的にメモリを確保している可能性があるライブラリを利用している場合は解放する必要があります。
画像、モデル、音楽などロードするものは基本的に解放する必要があると思ってください。あとハンドルがあるものも大抵は解放を必要とします。
ただし、プログラム終了まで確保しっぱなしで良いのならDXライブラリ関係なら終了時に自動で解放されますし、Win32APIやC言語の標準関数でも解放されるものもあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

atori
記事: 43
登録日時: 13年前

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

#4

投稿記事 by atori » 12年前

>>h2so5さん、softyaさん

ありがとうございました。なんとなくですがわかりました。
Done is better than perfect.(Mark Elliot Zuckerberg)

閉鎖

“C言語何でも質問掲示板” へ戻る