[過去ログ] C/C++ゲーム製作総合スレッド Part1 (1001レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
229: 名前は開発中のものです。 [sage] 2012/06/03(日) 21:22:27.91 ID:Y5aEM5Jb(1/5) AAS
>>226
そんな事実はない。VirtualAllocのがぎりぎりまでとれるのは事実だけど管理も全部自分でするはめになるぞ
230
(1): 名前は開発中のものです。 [sage] 2012/06/03(日) 21:26:33.66 ID:Y5aEM5Jb(2/5) AAS
>>228
いや、初期値はそれで合ってる。仮想メモリの上限がくるまでどんどん拡張される仕様
239
(1): 名前は開発中のものです。 [sage] 2012/06/03(日) 22:03:21.55 ID:Y5aEM5Jb(3/5) AAS
>>233
実際やってみ。状況にもよるが数百Mぐらいは特に問題ないから
240: 名前は開発中のものです。 [sage] 2012/06/03(日) 22:27:01.07 ID:Y5aEM5Jb(4/5) AAS
Win32の VirtualAlloc は仮想メモリから直接メモリを確保する機能で、
ページ単位の操作しかできないので細かい確保にはむかない。
100byte だけ欲しいと思っても 64kbとられてしまうので、
C++のオブジェクトの確保とかで使うとすごい無駄なことになる
静的なM単位の大容量データの確保用に使うのには向いてる

HeapAlloc は仮想メモリから確保したメモリを、
さらに小分けに管理して割り当ててくれる。管理のオーバヘッドと
引き替えに細かいメモリを効率的に使える。
VC++ の malloc や new はこの HeapAlloc で実装されてるはず

ただ、ヒープ系メモリはどうしても「断片化」がおこる。
合計ではメモリが余ってても、間に邪魔者がいると連続領域を確保できなくなる。
ゲームはわりとこの断片化をおこしやすい傾向があるので、
オブジェクトの寿命ごとにヒープを別グループで確保するのが
定番テクニックになる。C++ ではクラス単位で new を差し替えできるから、
そこで使うヒープを切り替えるようにする

Win なら HeapAlloc を直接使って別ヒープを確保する形で new を実装するか、
あるいはVirtualAlloc したメモリに対して dlmalloc などの
ヒープライブラリを使って実装することになる。
245
(1): 名前は開発中のものです。 [sage] 2012/06/03(日) 23:37:00.73 ID:Y5aEM5Jb(5/5) AAS
>>241
メモリ確保失敗したら、基本続けるのは無理だろうから基本は即終了でいいんじゃないかと
全部解放してタイトルに戻るとかそういう工夫はしてもいいと思う

>>242
Win32以降のGlobalAlloc/LocalAlloc はHeapAlloc のラッパー関数です。領域も malloc と同じはず
GHNDすると再配置もしてくれてるからフラグメンテーションにならなかったってことではないかと。
そのかわりパフォーマンスはわりと落ちていたと推測します

スクリプト系は、作りにもよるけど、案外あっさり
フラグメンテーションの原因になるので、あらかじめ
リソースとはヒープわけるのが上策ですね
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.177s*