メモリについて その2

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

メモリについて その2

#1

投稿記事 by jay » 13年前

その2と言っても以前の質問とは直接は関係ないのですけれどね・・・
VC++でゲームを作っている途中ふと思ったのですが

ゲーム中で必要な画像やBGMを格納して描画及び再生、そして不要なものは開放しますよね。
しかしあまりたくさん読み込み過ぎるとメモリが圧迫されてしまうと思います。
でも逆にあまり頻繁に格納と開放を繰り返しているとプレイ中に「重さ」として感じてしまうかと思います。

そこで生じた疑問ですが
一つのゲームでどれ位までメモリを使っても許されるものなのでしょうか?

最も個人で作るレベルのゲームだと、意図的にそんなプログラムを組まない限り滅多なことではメモリが悲鳴をあげることも無いとは思いますけどね(笑)

そう考えるならプレイ中に重さを感じさせないために
「格納」→「再生」→「開放」を何度も何度も繰り返すのではなく、「格納したまま開放せず、必要に応じて再生」
と言った形にするのが良いのでしょうか?
その辺りについても教えて頂けると助かります。
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

ぬっち
記事: 105
登録日時: 13年前
連絡を取る:

Re: メモリについて その2

#2

投稿記事 by ぬっち » 13年前

jay さんが書きました:そう考えるならプレイ中に重さを感じさせないために
「格納」→「再生」→「開放」を何度も何度も繰り返すのではなく、「格納したまま開放せず、必要に応じて再生」
と言った形にするのが良いのでしょうか?
私なら、マップの切り替わりやステージの切り替わりで前のシーンで使用したリソースを破棄して、次のシーンのリソースをロードさせるという方法を用いますね。
そして、シーン中で必要に応じて再生するという感じです。
やはりプレイ中に開放と格納を行うのは速度面からしてあまり良い方法とは言えないですね^^;

完全に余談ですが、FF13なんかは、ほぼ一本道であったため先のシーンをバックで読み込んで、ロード時間を出来るだけ短縮させているらしいです。
これはマルチスレッドを使えば出来そうですが、私はまだやったことがありません。

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

Re: メモリについて その2

#3

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

メモリがどのぐらいが最適かはパソコンの場合決めづらいものがあります。
256MBのメインメモリで更に64MBぐらいはVRAMに持って行かれてゲームに100MBぐらいしか使えないパソコンの人もいますし、8GBのメインメモリで1GBのVRAMの人など(ただし、32bitのゲームの場合は3GBほどしかゲーム自体は利用できない)など様々です。
なので、出来るだけ低い環境に合わせるとなると常駐しないほうが良いと考えます。

ゲーム機の場合はメモリがギリギリな場合が多いので裏(スレッド)で読み込み、圧縮したままメモリにキャッシュなど様々な手法を駆使せざる負えません。まぁ、そこまでパソコンで個人でのゲーム作成でやる必要はないので、もう少し簡単な方法を取られると良いと思います。
あとDXライブラリ関数の場合はスレッドでの読み込みが出来ない仕様です。なので、次のように気をつけてみてください。

・最初に一気に読み込むとロードが長くなるので、ステージの切れ目とかマップ変更時に読み込む/破棄する。
・最初から最後まで使うデータは一度読んだら破棄しない。
・DXライブラリを使わずにファイルのメモリ読み込みだけをスレッドで行う。
スレッドで読み込み後にメイン処理でメモリからDXライブラリの関数のFromMem系でDXライブラリにデータを展開させます。
スレッド絡みなので難易度が高くなり、バグ発生の危険も高くなります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

jay
記事: 314
登録日時: 13年前
住所: 大阪市
連絡を取る:

Re: メモリについて その2

#4

投稿記事 by jay » 13年前

>>ぬっちさん
シーンの切り替え、やはりここで開放と読み込みを行うのがベターなのですね。
ここで時間が掛りすぎたらプレイヤーにストレスを与えてしまいますし、「必要な分だけ開放して格納」が一番なのですね。
完全に余談ですが、FF13なんかは、ほぼ一本道であったため先のシーンをバックで読み込んで、ロード時間を出来るだけ短縮させているらしいです。
これはマルチスレッドを使えば出来そうですが、私はまだやったことがありません。
僕はできる自信が無いですw
下手するとかえって重たくなりそうですしね、上手にそれをやるには相応の知識とテクニックが要りそうですね。


>>softyaさん
成る程~
僕の場合はメインメモリが4GBですから結構余裕がありますが、初期のXPなんかを使っている人の場合はその限りではないってことですね。
そしてメモリに常駐させるのは必要最低限、後は必要に応じて格納と開放を繰り返す訳ですね。

そしてせっかく教えて頂いたのですが、僕にはスレッドがよくわからず・・・なんだか申し訳ないです、勉強不足ですいません。


ともかく、お二方ともありがとうございました。
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

jay
記事: 314
登録日時: 13年前
住所: 大阪市
連絡を取る:

Re: メモリについて その2

#5

投稿記事 by jay » 13年前

またやってしまった・・・


”解決”です。
付け忘れていました。
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

閉鎖

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