2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

C/C++ゲーム製作総合スレッド Part7

1 :名前は開発中のものです。:2015/01/11(日) 10:19:31.85 ID:RDQlUyF+.net
ゲーム製作におけるC/C++全般に関するスレです。

元スレ
DXライブラリ 総合スレッド その18
http://peace.2ch.net/test/read.cgi/gamedev/1399459468/

前スレ
C/C++ゲーム製作総合スレッド Part1
http://toro.2ch.net/test/read.cgi/gamedev/1337516528/
C/C++ゲーム製作総合スレッド Part2
http://toro.2ch.net/test/read.cgi/gamedev/1351015269/
C/C++ゲーム製作総合スレッド Part3
http://toro.2ch.net/test/read.cgi/gamedev/1357899040/
C/C++ゲーム製作総合スレッド Part4
http://toro.2ch.net/test/read.cgi/gamedev/1376262450/
C/C++ゲーム製作総合スレッド Part5
http://peace.2ch.net/test/read.cgi/gamedev/1389798031/
C/C++ゲーム製作総合スレッド Part6
http://peace.2ch.net/test/read.cgi/gamedev/1404815419/

301 :名前は開発中のものです。:2015/02/11(水) 01:41:17.25 ID:IKslX+U4.net
すんませんVC++のメモリ確保がWin32APIの関数呼ぶだけって何かで見たからそういうもんだと思ってました

302 :名前は開発中のものです。:2015/02/11(水) 01:49:31.11 ID:tga+SBCo.net
>>297
アプリケーションとしてのゲームはこれで確定だと思ってた
動的と言えば動的だけど都度都度確保はあり得ないって意味でこの手の話はスルーしてたけど、そう言うものでも無いみたいだと知ったわ
取れなかった場合の処理は思い付かないけど

303 :名前は開発中のものです。:2015/02/11(水) 01:55:07.09 ID:5bVnp7SH.net
ヒープ、動的確保は丸投げに近いが。普通のauto変数とかは最初に確保した領域を使いまわす。



メモリの4 領域
http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/MP/final/part06/img6.png
http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/MP/final/part06/node8.html

テキスト領域:機械語に翻訳されたプログラムが格納される. この機械語の命令が 1 行づつ実行されることでプログラムが動く。

静的領域:グローバル変数などの静的変数が置かれる。

ヒープ領域:メモリの動的管理 (C 言語の malloc 関数や C++ の new 演算子でメモリを確保すること) で用いられる。

スタック領域:今回の演習で扱ったように CPU のレジスタを一時的に退避させたり、また C 言語の自動変数 (多くのローカル変数) が置かれる。

304 :名前は開発中のものです。:2015/02/11(水) 02:24:49.00 ID:COJ2IR9k.net
いわゆるメモリープールのようなものは既にランタイムに実装されてる場合もあるし
自分で実装する・しないは実行環境によると思う。
最近はこの辺のことは既に当たり前になってるのかどうか知らないけど、
検索してもあまり引っかからないね。とりあえず引っかかったところ
http://vcpp-ml.ldblog.jp/archives/1169943.html
ではVCのランタイムのソースみればとなってるので
興味ある人は読んでみては。

305 :名前は開発中のものです。:2015/02/11(水) 02:41:42.58 ID:0cWu/C1d.net
俺が昔作ったベンチ引っ張り出してきた
10000個確保して解放を1セットで、10回繰り返す

malloc 0.0104349686516726 100
new 0.0170437163409596 163.332702856062
tlsf 0.0327989992535455 314.318138831095

右側がmallocを100とした場合の倍率。意外とtlsfは遅い。
んで下が自作のメモリアロケータでnewとdeleteをオーバーロードしてて
上で使ったnewするソースをそのまま使ってる。

fixpool 0.01086365697986310 104.108189899754
fixpool-ss 0.00270476282206395 25.9201815774541

アルゴリズムは一回使ったものをリストにつなげておいて、newのとき取り出すだけ。
ssは上限が分かっている場合で、先にメモリ確保するのでmallocを上回れる。

まぁ、はっきり言って速度だけを考えると自作アロケータの必要はないかなレベル・・・と思う。
確か、スマートポインタのベンチもどっかにあったはずなんだが、どこだったか・・・

306 :名前は開発中のものです。:2015/02/11(水) 02:52:05.14 ID:IKslX+U4.net
>>304
ゲームエンジン•アーキテクチャ(ソフトバンククリエイティブ)によれば、デフォルトのnewが遅い理由は管理コストとOSのコンテキストスイッチとあるけど
URL先の内容からすると最初に確保された分越えなければコンテキストスイッチは発生しないって事なんかな
ていうか2000年の時点でそういう仕様だったのか

307 :名前は開発中のものです。:2015/02/11(水) 02:52:16.60 ID:rJC6nJDr.net
>>305
その自作アロケーターって複数スレッドから呼んでも大丈夫なように作ってんの?
だったらたいしたもの。

今時モバイルですらマルチスレッドが当たり前だからベンチマークも複数スレッドで実行すべき。
スレッド使うライブラリーをリンクしないとシングルスレッド版のmallocとリンクする環境もあるし

308 :名前は開発中のものです。:2015/02/11(水) 03:06:07.85 ID:rJC6nJDr.net
>>306
ライブラリが貧弱な環境だと効果はあったんじゃない?
ライブラリが貧弱で有名だったPS3とか。
ゲームエンジン アーキテクチャって本PS専門デベロッパーだった人の著書みたいだし

309 :名前は開発中のものです。:2015/02/11(水) 03:24:52.81 ID:tga+SBCo.net
>>307
データ読み込みや通信で「now loading…」、ムービー再生とか以外でマルチスレッドって何に使うの?
いろんな判定でシングルでないと困らない?
俺はコンシューマ長すぎのせいか、マルチスレッド(タイムスライス型)は、そもそもゲームシステムとして実装が思い付かない
どうしてもタスク()で疑似マルチしか作れないや

310 :名前は開発中のものです。:2015/02/11(水) 03:29:13.74 ID:0cWu/C1d.net
>>307
ポインタのつなぎ替えの部分に一応クリティカルセクション使ってる。
が、これのベンチがねぇ・・・
複数スレッドで同時に確保しまくって人為的にコリジョン起こしても、
シングルの場合と違って純粋な値が取れないので。

総レス数 712
178 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★