[過去ログ] ゲームプログラミング相談室【Part5】 (970レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
420
(1): 03/11/15 19:53 ID:31uHGMH8(1/2) AAS
>>419
特殊な環境なら、まずそれを書け。
421: 415 03/11/15 19:57 ID:JXJsuPxy(3/5) AAS
>420

>メモリ管理が不十分な動作環境なのでに動的なメモリの確保、開放を行うと
これでは説明不足でしたか^^;
422
(1): 03/11/15 19:59 ID:ptxA9sKP(2/4) AAS
具体的にターゲットとするOSとハード構成を記せ。
423: 03/11/15 20:00 ID:31uHGMH8(2/2) AAS
Windowsなのか、GBAなのか、MacOSなのか、Linuxなのか、それ以外か、
プラットフォームは何なのかハッキリさせろと言っているのだけど。
424: 415 03/11/15 20:04 ID:JXJsuPxy(4/5) AAS
>>422
質問の回答に必要な情報とは思えなかったので
特に明記しませんでした

OSというものは存在しません
あるらしいのですが使うつもりはありません
ハードウエアはかなり昔に生産中止となったドリームキャストです
425
(1): 03/11/15 20:21 ID:ptxA9sKP(3/4) AAS
次はコンパイラの製品名とミドルウエアの詳細を記せ。
426: 415 03/11/15 20:36 ID:JXJsuPxy(5/5) AAS
>425
質問に答えれば回答が得られるのでしょうか?

コンパイラはフリーのgccのSH4クロスコンパイラを使っています
ミドルウエアと呼べるようなものはありません
機器の制御関係はすべて自分で作ることになります
427: 03/11/15 22:13 ID:N6eiQqH1(1) AAS
秋葉原のラオックスBOOK館一新されてるけど
やねうら某の本がゲームプログラミングコーナーから一掃されてた(笑
428
(1): 03/11/15 22:47 ID:NMwl6EHM(2/2) AAS
>使用したいCPU用のクロスコンパイラが手に入らないのと

Javaゼンゼン分かってない。

>たとえC++であってもNew演算子等動的なメモリ確保命令を使用しないのであれば
>C言語で十分ではないかとおもいC言語を使用することにしました

C++もゼンゼン分かってない。

勉強しなおせ。
429
(1): 03/11/15 22:56 ID:ptxA9sKP(4/4) AAS
動的なメモリー管理での問題が気になるのなら、
newをオーバライドして自前でヒープ管理すればいいだけの話です。
430
(1): 03/11/15 23:17 ID:QbqUtBsl(3/4) AAS
ゲームをちゃんとデザインすれば、出てくるオブジェクトの最大数くらい算出できるだろ。
その最大数が実機のメモリ量を超えるようなら、当然デザイン的な意思決定が必要になる。

つまり、
・最大数を抑えるように設計しなおす
・あらかじめ決めた最大数を超えたら、特別な処理をするようにする
 (余分なオブジェクトを消す、とか、それ以上オブジェクトが出現しないようにするとか)
などだ(オブジェクトの種類によってそれぞれ最大数を決めるというのも良い手だ)。

いずれにせよ、どのようなゲームを作るかに強く依存する話なので、一般的な話としての
参考書は存在しないだろうね。ただ、アロケータについて論じた本や論文とかは有ると思う
から、そういうのが参考になるかも?このへんは、マ板の人のほうが詳しいか。

というか、本当に悩んでるなら、問題ない程度に詳しくココで晒してみたら?
431: 03/11/15 23:18 ID:QbqUtBsl(4/4) AAS
マ板じゃなくてム板だったw
2ch板:tech
432
(1): 03/11/16 01:40 ID:4zFB3hit(1/2) AAS
> 実装していないメモリ領域への確保が起こりハングアップするということです
mallocを、とりあえず正しく動作するように置き換えろ。
それができないようなら、「機器の制御関係はすべて自分で作る」なんて無理。
433: 415 03/11/16 02:57 ID:2l7gzWNA(1/12) AAS
>428
>Javaゼンゼン分かってない
>C++もゼンゼン分かってない
プログラムを専門に勉強したことがないため
十分に理解してるとは言えないので何か思い違いをしているのでしょうか?
どの部分がどのような理解不足をしているのか勉強のためにお教えください

>429
>432
new、mallocをオーバーライドするって考えは思いつきませんでした
確保したメモリアドレスを随時監視して未実装メモリの場合
エラーとして返すようにすればいいのですね
ちょっと考えてみます

>430
簡単にいえばそうなのですが
いつもはOSやコンパイラのメモリ管理に頼り切ってるので
オブジェクトに必要なメモリ量、その配置が実際どうなってるのか知らないのです
434
(2): 415 03/11/16 02:58 ID:2l7gzWNA(2/12) AAS
続き

少し前に同じような質問をプログラム板でもしたのですが
「メモリ管理機構を自前で作れ」という答えで終わってしまいました

数年前流行っていた時期に作ってみたときには用意するオブジェクト数が少なく
完璧とはいえませんが、何とかプログラマ側で管理しきれていました。
しかし、今回の企画にあわせてオブジェクトの数を増やしていくにしたがって
「どの状況下でどの程度の量がどの部分に配置されて使用されるのか」
が、把握できなくなってしまいました

そこで、ゲーム系プログラムならこのような多数のオブジェクトを使用する例が多いため
自分の知らない「ちょっとしたテクニック」であえて動的にオブジェクトを量産しなくても
静的、もしくは準静的な確保によって乗り越えることができるのでは?
はたまたオブジェクトを量産することなく動作させる方法があるのでは?
と思い質問してみた次第です

やはり根本的にコンパイラ自身を書き換えて問題のないメモリ確保の方法を確立する
といった考え方のほうがスマートだという意見ばかりですので
こちらの方向で考えてみようと思います
435
(2): 03/11/16 03:35 ID:4zFB3hit(2/2) AAS
> どの部分がどのような理解不足をしているのか勉強のためにお教えください
とりあえず、Javaの動作原理、CとC++の思想的な違い、あとは自分で調べろよ。

> やはり根本的にコンパイラ自身を書き換えて問題のないメモリ確保の方法を確立する
> といった考え方のほうがスマートだという意見ばかりですので
だれもコンパイラを書き換えるなんていってないだろ。
436
(1): 03/11/16 09:49 ID:sJV9ESEo(1/3) AAS
>>434
>自分の知らない「ちょっとしたテクニック」であえて動的にオブジェクトを量産しなくても
>静的、もしくは準静的な確保によって乗り越えることができるのでは?
>はたまたオブジェクトを量産することなく動作させる方法があるのでは?
>と思い質問してみた次第です

そんなものは無い(きっぱり)。
普通のプログラミングでも行うように、そのソフトに最適なメモリ管理を行うだけ。
んで、「最適なメモリ管理」はどういうソフトなのかに強く依存するので一概には言えない。

以上。終わり。
437
(2): 03/11/16 09:59 ID:X2F6x4IR(1/5) AAS
>>434
あんまり時代とズレてて浦島太郎と話してるみたいな気にさせるね。
結論から言うとそんな部分に力を入れる意味はまったくないね。
くだらないこと考えるのやめてさっさと組めよ。
438: 03/11/16 10:24 ID:HDZlRlF4(1) AAS
>>414
遅レスすみません。

>・ボタン押下イベント発生したら一定時間待って
>・その間に発生したイベントがあるかチェックして、あるなら読み出して
>・最終的に押されたボタンの組み合わせのアプリを起動する

どこを安定とするのかが微妙なんです。
439: 03/11/16 10:36 ID:sJV9ESEo(2/3) AAS
安定とは?
440
(1): 415 03/11/16 12:57 ID:2l7gzWNA(3/12) AAS
>>435
コンパイラを書き換えるという表現はよくなかったですね^^;
gccをつかっているとオープンソースであることの利点でコンパイラやライブラリ
今回の場合だとLibcあたりを簡単に書き換えれるのでオーバーライドするよりも
直接書き換えるほうが面倒がすく問題点がわかり易いので、そんな風に考えていました

>436
その最適なメモリ管理の方法を教えてもらいたかったのです
どういうソフトか?はオブジェクトをメモリ一杯まで量産するようなタイプって事なのですが

>437
たしかに今のOSとCPUとコンパイラに守られてかつメモリが豊富にある
現在の開発環境の状況からみれば、動的なメモリ管理自身をを疑って
あえて静的な方法を取ろうとする事は、時代に逆行しているような意見かもしれません

しかし、必要なオブジェクトを作成しようとして正常に動作せず
その原因がメモリが足りず実装外のアドレスに確保している
などということがあるため

この部分が解決されないとメモリ不足で動かないのか
それともバグで動かないのか把握できません
すくなくとも最低限の規則を作らないとダメなのではないでしょうか?

もっと簡単に質問するならば
みなさんは動的なメモリ確保で問題がでたとき
たとえばNew演算子を使った場合にエラーがでたとき
どのように対処しているのでしょうか?
441
(1): 415 03/11/16 13:05 ID:2l7gzWNA(4/12) AAS
>435
JAVAもインタプリタ、コンパイラ、JavaVMがそのCPUに対応していないと
動かないと思うのですが、それとも自分の知らない別のJAVA言語があるのでしょうか?

C++とC言語の根本的な違いはクラスオブジェクトを使用するオブジェクト指向型言語に
進化していると言うことだと理解していたのですが?

それとも、オブジェクト指向型言語はオブジェクト自身の完成度が高ければ
用意したオブジェクトを動的に追加,開放することで
コードの簡易化、開発効率の向上が見込めるが
生成されるオブジェクトにとって十分なメモリ領域が必要である
といった認識がまちがっているのでしょうか?

こちらはスレ違いなので・・・スルーしてもらってもよいです
442
(1): 03/11/16 14:13 ID:DmkNbY6h(1/8) AAS
>>415
自分で作ったメモリの動的確保なの?違うでしょ?
それなのに、そのメモリの動的確保がおかしいなんて言ってるのが房っぽい。

そもそもドリキャスで使える前提の物なのかな?
PS2だってee-gccって専用のコンパイラがあるのに、まさか普通のgcc使って
ドリキャスで上手く行かないって騒いでるの?

その開発が正規の手続きで不正な方法を使用してないならSEGAに相談すれば良いだろ。
仕事なら当然だろ。
443
(1): 437 03/11/16 14:28 ID:X2F6x4IR(2/5) AAS
>>440
>しかし、必要なオブジェクトを作成しようとして正常に動作せず
>その原因がメモリが足りず実装外のアドレスに確保している
>などということがあるため
>この部分が解決されないとメモリ不足で動かないのか
>それともバグで動かないのか把握できません
なにこれ?どうして全然関係ない問題を絡めて考えてるの?
この状態でどうしてメモリ管理なんて自分でやろうというきになるのか全く理解できない。
冷静に考えてみて、こんなことがごちゃまぜになってること自体が問題でしょ。
だいたい一度溢れるまでロードしないとオブジェクトが正しくロードできてるか
どうかもわからないプログラムってどうよ?
444
(1): 03/11/16 14:39 ID:DmkNbY6h(2/8) AAS
>この度アクション系ゲームを作ろうと思い立ちました
>これまではボード系ゲームのリアルタイム性の少ないプログラムしかしたことのないため
>複数のキャラが同時に動いて判定をする、そんな仕組みの作り方に戸惑いを覚えています

この時点で、その辺のゲー専の生徒レベル。
環境の所為にしてるが
大方、自分の頭の中で壮大な考え違いや
全然間違ってる可能性が高いと考えるのが普通。

いるだろ?コンパイラのバグだ、標準関数のバグだってスグ騒ぐ奴がさ…
445
(1): 03/11/16 14:40 ID:h1Fvxjvv(1) AAS
>>441
お前は

>可能ならJavaでの開発をしたいのですが
>使用したいCPU用のクロスコンパイラが手に入らないのと

と言ってる。必要なのはクロスコンパイラじゃなく、その環境用のJavaVMだ。
446
(1): 415 03/11/16 15:02 ID:2l7gzWNA(5/12) AAS
>442
使用しているCPUが汎用のSH4ですのでsh4のgccノクロスコンパイラを使用しています
node,メモリ確保の方法malloc等はそのまま使えるもの(言語付属のもの?)を使っています
不正かどうかはまだはっきりしていませんが、正規の手続きでないので
SEGAに相談のはもってのほか、開発環境を明らかにするのもためらいます
もちろん、趣味でやってるだけなので仕事なわけではありません

>443
全然関係ない問題といわれる意味がわかりません
みなさんのメモリ管理の意識はどうなっているのでしょう?

OSによってメモリ領域が保護されている場合ならともかく
>ロードしないとオブジェクトが正しくロードできてるか どうかもわからない
は普通に起こりえる事態だと思うのですが、なにが間違ってるのでしょうか?

>444
べつに環境のせいやコンパイラのバグで騒いでいるわけではありません
問題がでるので別の回避方法を模索しているだけです
問題なく動くのであれば理論が判らなくて言語がなんでも気にしません

>445
専門に勉強していないので表現が正しくなく混乱を招くのは申し訳ないです
クロスコンパイラが必要というはその動作環境で動くように動作設定することと
大雑把に括って表現しました
JavaでいうのであればもちろんそのCPU用のJavaVMが必要なので
ということです
447
(2): 03/11/16 15:15 ID:X2F6x4IR(3/5) AAS
>>446
変な部分だけピックアップするね。

>ロードしないとオブジェクトが正しくロードできてるかどうかもわからない

じゃなくて、
俺は

>>一度溢れるまでロードしないとオブジェクトが正しくロードできてるか
>>どうかもわからないプログラムってどうよ?

って言ったんだけどどうよ?
はじめの部分重要だよ。変な風に曲げないでよ。
全然意味が違っちゃってて笑っちゃったよ。
ヘルプ正しく読めてるかどうかも不安になるでしょ。
448: 03/11/16 15:22 ID:25ri5rSm(1) AAS
まったくスレの流れを見ずに言ってみるけど
メモリの状態なんてコアダンプを吐いて読めばいいだけじゃないの?
449: 415 03/11/16 15:27 ID:2l7gzWNA(6/12) AAS
すこし、話題がズレてきてしまっているので
もう一度整理しなおして質問しようと思います

OS等によってメモリ領域が管理されていない
かなり特殊な動作環境でのプログラムをしています

そのためメモリの確保、開放については
プログラム側で常に注意しないといけないと思っています
特にコード的には確保できる領域も実際には
実装されていない事も考慮にいれないといけません

静的なメモリ確保方法ではコンパイル時に確保位置が把握できるため
問題をみつけることが簡単です
しかし、動的なメモリ確保では変動するメモリ状況にあわせて
確保位置,量が変化するためプログラム側で逐次チェックするのが難しいです

つづく
1-
あと 521 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.023s