[過去ログ] ゲームプログラミング相談室 (986レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
800(1): 02/10/27 10:53 ID:??? AAS
>>798
一種のキャッシュだよ。まっとーなメモリ保護のある環境下で OS を呼び出して
メモリを割り当ててもらうのは
ソフトウェア割り込みによる特権モード変更
割り込みハンドラでのレジスタの待避などの定型処理
(ここで OS のメモリ割り当て関係のコードに入って)
各種制限のチェック(たとえばユーザあたりのメモリ割り当て越えてないか、
とか)
仮想記憶のページテーブル、TLB の変更
OS の持つ仮想記憶レイヤーにおけるページエントリの変更
と、いろいろ手間がかかる。ユーザ空間で完結できれば、それに越したことはな
い。
このあたりは使ってるライブラリによっても変わってくるけど、昔の UNIX だと
一度 malloc したら二度と OS には返さないのが一般的で、最近でも条件 (*1)
が揃わない限りはまず返さない。
本当に OS からメモリを短時間・大量に借りたいなら malloc/free なんか使っ
ちゃダメです。mmap() とか VirtualAlloc() とか使いましょう。
(*1)
ヒープの端っこが free() されるとか、ページ単位で連続した空間が free される
とか。この条件を緩くして OS 側に返すチャンスを増やそうとすればするほど、
malloc/free が内部で管理・チェックするデータが増え、割り当て・解放に掛か
る時間もメモリ消費も大きくなるというトレードオフがある。
たとえば Solaris だと libc, libmalloc, libmapalloc あたりに実装が異なる
malloc/free がいくつかあるから、ソースを眺めながら処理速度を比べてみると
勉強になるよ。
上下前次1-新書関写板覧索設栞歴
あと 186 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.007s