15/01/11 10:39:11.80 lPY833F2.net
乙
3:名前は開発中のものです。
15/01/11 18:56:29.39 Q8fjCZ3C.net
おつん
4:名前は開発中のものです。
15/01/12 16:06:35.67 skthRk+e.net
基本的にゲーム内で使う文章を外に書くメリットはないよな?
で、セーブファイルは専用の構造体を用意して
そこに保存が必要な数値を片っ端からぶっこめばいいんだよな?
なら今のゲームでテキストファイルを使う場面って、
セーブデータ等のテキストデータのエクスポートくらいだと考えていいんだろうか?
5:名前は開発中のものです。
15/01/12 16:37:57.91 7zQT7KO5.net
文章校正のたびにいちいちコンパイルすんの?
6:名前は開発中のものです。
15/01/12 16:41:38.11 2JI68Ytd.net
海外のゲームやったことないのかね?
大抵テキストデータは外に置いてあって日本語化Modとか作られてたりする。
日本国内しか相手にしないならそれでも良いと思うけど
7:名前は開発中のものです。
15/01/12 18:56:00.81 +4zBZCv5.net
テキストデータでデータ構造作っておくと色々と便利だよ
テキストエディッタ使えばデータを書き換えられるから、
わざわざ専用エディッタを作らなくてもいいし
8:名前は開発中のものです。
15/01/13 02:13:15.64 N
9:Qh/p/ub.net
10:名前は開発中のものです。
15/01/13 02:51:46.58 z6JNQND6.net
ウチの会社では、基本的にゲーム内で使う文章は外のツールで作成してるな。
わざわざソース内に置くメリットがむしろ感じられない。誤字修正の度にプログラマが手を入れる必要が出てくるし、ビルドに時間もかかるし、別の言語に移植する際に面倒じゃないか。
あ、あと、文章の問題であればそのツールを開けばいいという、問題の修正箇所を局所化できるというメリットもあるから。
セーブは確かに専用の構造体(というかPODクラス)を用意して必要なデータをぶっこむ、シリアライズして吐き出す形だな。
それらの吐き出す形は結局単純なテキストではなく、何らかの形式に則ったバイナリ(テキストエディタで開いても意味不明な部分が交じるファイル)だけど。
11:名前は開発中のものです。
15/01/13 08:36:10.29 u897FUjW.net
プログラマ1人で造るミニゲームとかで、メニュー程度の文章量しかないなら
たしかにハードコーディングのほうが楽ではある
12:名前は開発中のものです。
15/01/13 11:20:25.68 tklViF/V.net
>>9
そういう文章ってどうやってプログラム中から識別するの
"会話0001"?
13:名前は開発中のものです。
15/01/13 12:40:45.14 x0mM86eW.net
4 :名前は開発中のものです。:1985/01/12(土) 16:06:35.67 ID:skthRk+e
基本的にゲーム内で使う画像を外に書くメリットはないよな?
で、描画手順は専用の構造体を用意して
そこに開始点・終了点の座標や塗る色の数値を片っ端からぶっこめばいいんだよな?
なら今のゲームで画像ファイルを使う場面って、
画面紹介等の画像のスクショくらいだと考えていいんだろうか?
14:名前は開発中のものです。
15/01/13 18:27:31.65 u897FUjW.net
>>11
ユニークな名前で管理するのが面倒な規模なら
ロジックの部分もある程度は外に投げるようになるんでね
15:名前は開発中のものです。
15/01/13 18:40:16.59 RKeKGf32.net
画像ファイルでそれやろうって奴はいないだろ…
テキストは定義された物を書き出すだけだからやろうって考える人がいるだけで
あと、MOD作ってもいいよとか多人数でやるよとか
追加含めて大量に書くよってんならテキスト外置きなんだろうけど、
逆に言えばこのどれにも当たらないならいらないかなって
一部でもオープンソースにする気はないって人もいるだろうし
壊せる壁って破壊済み相当の状態で床などに変化するオブジェクトだけど、
これはダメージを与えていくと壊せる物はマップチップ扱いなのかキャラクター扱いなのかよく分からない
キャラクターをマップチップに正確に重ねてチップを隠すんならいけそうだけど、
そうするとマップ情報をキャラクター生成部に送る必要があるんだろうか?
16:名前は開発中のものです。
15/01/13 19:39:05.23 MdTOZHze.net
>>14
普通に居るけど
Mod作りやすいってことは本編も作りやすいって事がわからんのだろうかね。
あとオープンソースの使い方おかしい
17:名前は開発中のものです。
15/01/13 22:57:29.48 RKeKGf32.net
それ、一部の場面でレイヤーの代わりに使ったりする物のことを言ってるんだろ?
描画画像を全部内部で0から生成なんかやってたらそのコードだけでものすごい量になっちゃうよ
逆にそれが部品として小さいなら、外に置かなくても組み込んじゃえってのはありだとは思うし
それを実行しているのが一行目ってわけだ
非現実的な案ではあるけど、できるんなら画像の隠蔽は完璧だな
あと、一部ならオープンソースじゃなくてシェアードソースね、おk覚えた
18:名前は開発中のものです。
15/01/13 23:22:24.12 tklViF/V.net
お前は勘違いをしている
19:名前は開発中のものです。
15/01/13 23:48:10.98 QJSitgs3.net
ソース違い
20:名前は開発中のものです。
15/01/13 23:48:23.40 yF9v46c2.net
たとえ話は
通じなかった時に双方ともに間抜けなことになるのが辛いな
21:名前は開発中のものです。
15/01/14 00:25:45.86 8sU4Ec1w.net
スレを流し読みしたが、>>14-16の辺りが話が噛み合ってないよな
これお互いに誤読してるだろ。推測するに大凡の所お前らの間には
目立った意見の食い違いはなさそうだから仲良くしろよな
22:名前は開発中のものです。
15/01/14 01:05:05.22 8sU4Ec1w.net
>>14
>壊せる壁って破壊済み相当の状態で床などに変化するオブジェクトだけど、
>これはダメージを与えていくと壊せる物はマップチップ扱いなのかキャラクター扱いなのかよく分からない
本来は、昔のゲーム機の仕様(例えばOBJとかBGがあるやつね)の様々な縛り
の中での話なので、今なら好きに定義して自由に作ればいいんじゃねーかな
見当がつかなくて何か参考にしたいんならツクールの類でも触ってみて
内部の仕組みを推測して真似てみたりすればいいんじゃねーかな
>キャラクターをマップチップに正確に重ねてチップを隠すんならいけそうだけど、
そういう手も当然ありだよね
>そうするとマップ情報をキャラクター生成部に送る必要があるんだろうか?
どういう機能分割をしてるのかイマイチ分からんけど、座標系の概念が
考慮されてないなら取り入れたほうがいいんじゃねーの
23:名前は開発中のものです。
15/01/14 01:50:18.20 oy3qeLAO.net
え、俺はマップチップもキャラも一緒のオブジェクトなんだけど
お前らわざわざ分けてんの?
24:名前は開発中のものです。
15/01/14 23:47:05.61 nDPijqqTv
車用ピッキングツール 車の鍵を不正に開ける工具
URLリンク(www.amazon.co.jp)
25:名前は開発中のものです。
15/01/14 18:32:13.33 b3+ap1tg.net
>>22
舞台装置と役者は似て非なる別物だからよ
>>14みたいなことをやる場合、
当たり判定まではキャラクターと同じでも
HPは持っていない壊せない壁をどう定義するかがな
26:名前は開発中のものです。
15/01/14 20:11:23.18 oy3qeLAO.net
>>24
同じオブジェクトで行けるってことは、似て非なる別物じゃないと思うが
27:名前は開発中のものです。
15/01/14 20:25:50.33 mV/UlqnK.net
好きなようにすりゃええがな
あんさんの方法を否定してる奴なんて誰もおらん
あんさんは他人を否定したくて仕方ないかも知れないがな!
28:名前は開発中のものです。
15/01/14 21:38:06.89 0XojYraf.net
例えどんな方法でも実現可能だったとしても
複数の手法の中からベストな物を追求するのは良いことである
29:名前は開発中のものです。
15/01/14 22:19:18.87 oy3qeLAO.net
>>26
まぁ、お前にゃ聞いてないがw
似て非なる別物の根拠を訪ねただけで、否定したように感じるってのは相当病んでるぞ
30:名前は開発中のものです。
15/01/14 23:02:57.92 iwR4jgL6.net
当たり判定の範囲をなしを含む特有の定義にして、
一番最初に横たわるキャラクターオブジェクト それがマップ
他のキャラクターとは一部の要素が大きく違う分管理に差が出るし
無駄を承知で分けた
31:方が分かりやすくはなる…かも
32:名前は開発中のものです。
15/01/15 21:04:25.90 v7OuMrqm.net
マップと言えば、マップチップタイプみたいな並びを記憶しておく必要があるマップは、
当然二次元配列を使うとして
たとえば現在の装備一覧のような、
同じ要素を指す数値の並びをしている物の塊も二次元配列にすべきなんだろうか
33:名前は開発中のものです。
15/01/15 23:17:08.52 Q5DMCUO8.net
>当然二次元配列を使うとして
?
34:名前は開発中のものです。
15/01/16 08:47:44.30 ZjU+PjG/.net
>>30
別にどう作っても良いけどマップも1次元の配列で持っていた方が楽
座標x、yも持たせておけばいい
35:名前は開発中のものです。
15/01/16 12:23:34.85 KH2Og/LD.net
二次元のビットマップ画像も普通一次元配列で確保するよな。
36:名前は開発中のものです。
15/01/16 23:19:42.96 aIsA+egi.net
>>30
>たとえば現在の装備一覧のような(…中略…)二次元配列にすべきなんだろうか
一覧表示にも色々あるけど
要求(される操作)に応じて適切なデータ構造(コンテナ)選ぶものなので
二次元配列でおk(な要求)ならそれで作るのが一番いいんじゃねーの
要素数がたかが知れてる場合、配列(std::vector)使ってるからって
何か問題が生じるような事はまずないわけだし
37:名前は開発中のものです。
15/01/17 08:27:09.12 XHyVYcVD.net
2次元配列でOKなものは1次元配列でOK
わざわざ2次元配列を使うメリットは何も無い
38:名前は開発中のものです。
15/01/17 11:40:55.67 vMwgaTo6.net
シンタックスシュガーでしかないもんねぇ
初心者に教えるなら積極的に使うけど
39:名前は開発中のものです。
15/01/17 11:55:03.58 YJD7hT+O.net
一次元配列で確保した上で行(or列)先頭にアクセスするための
インデックス(LUT)を用意するような内部実装でも二次元配列
なんであってだな(>>33)
ターゲットも実装も不明ならメリットねぇとは断言できんよ
40:名前は開発中のものです。
15/01/17 11:57:15.65 YJD7hT+O.net
>>36被ったスマン
41:名前は開発中のものです。
15/01/17 17:31:33.18 KBPYDccT.net
たとえば縦スクロールSTGのマップとかで、
メモリ節約のためにマップを行ごとに細切れにして
表示範囲の上に一行足して下から一行引くような処理をしていたりする場合、
一行ずつ読み込んでるんだという事を示すためにわざとやるとか
試作段階で仕様が固まらなかった時の苦肉の策がそのままになっちゃったとか?
二次配列ってなんかあんまり使い道が浮かばない
42:名前は開発中のものです。
15/01/17 18:57:09.16 O8Io0R5L.net
3Dでキャラクターが技によって自由に地面の凹凸を操作できるようにしたいんですが
予め頂点を作っておかないとダメでしょうか?
キャラクターがここじゃーって指してる座標に一番近い面の上に
頂点をいい感じに窪ませるように配置して、
もともとあった面と入れ替わるような感じにしたいのですが、
当たり判定やハードウェアレンダリングしたいならやっぱり面倒ですか?
まぁハードウェアレンダリングなんてどうやればいいのかわからないですが
43:名前は開発中のものです。
15/01/17 20:24:50.48 dqiO68fF.net
確かにあんまり、というか殆ど多次元配列使わないな
配列へのアクセス部分は、隠蔽する傾向にあるから、アクセス用インデックスが多次元でも、アクセスの内部仕様は1次元配列でやってることが多いな
また配列の次元数を増やすと、後から解読するのが難しくなって、可読性が下がる
だから次元が増える場合は、次元別にクラス定義して、一次元配列のメンバに下位次元を持たせるようにしてるな
そういやD3DMATRIXに2次元配列のメンバあるけど、自分で定義したものじゃないし、そもそもそのメンバって殆どアクセスしないなぁ
44:名前は開発中のものです。
15/01/17 20:40:58.36 eRR0fEDj.net
std::vector<std::vector<int>>とかやるじゃん?
45:名前は開発中のものです。
15/01/17 20:55:17.63 XHyVYcVD.net
Dictionary<Point, Tile> Mapしか使わん
46:名前は開発中のものです。
15/01/17 21:10:19.92 dqiO68fF.net
>>42
enum定数でアクセスするのかな?
それにどんな情報を入れるんだろ
47:名前は開発中のものです。
15/01/17 21:23:58.77 j+s0LTMz.net
ベジェとか普通に書いたら多次元配列になるんじゃ…
48:名前は開発中のものです。
15/01/17 21:56:16.62 ceElOD9E.net
>>42
やりません
コンテナ2つ重ねても無駄に複雑になるだけでしょ
49:名前は開発中のものです。
15/01/17 22:50:59.20 Gl1ppQ6p.net
>>42
リソースに余裕がある場面では使ってるな
規模が大きくなってくると細かいことまで気にしてられんからこれ使うとラク
50:名前は開発中のものです。
15/01/17 22:59:23.12 aI7crSKW.net
>>40
テッセレータを使ったらいいのでは?
凹ませたい領域を4頂点の単純なタイルで表現し、それをフィールドに敷き詰めておく。
凹ませるときは、該当するタイルに対しテッセレーション(最大64分割)して、
高さマップを与えてディスプレースメントさせる。
51:名前は開発中のものです。
15/01/18 00:08:51.85 DJykD+cW.net
>>46
やるぜ?
可変長CSVの読み込みとか
52:名前は開発中のものです。
15/01/18 07:49:00.66 sJaCX/+8.net
長さ不定のに多重vectorはしないかな
53:名前は開発中のものです。
15/01/18 12:34:52.67 W1O9uyd7.net
vector<vector<T>>は便利なときもあるけど、
コピーやトラバースのパフォーマンスがvector<T>に比べて著しく遅いんで、
そちらが重要なときは多少冗長でもvector<T>で扱うようにしてる。
54:名前は開発中のものです。
15/01/18 12:40:46.60 beKeRz4L.net
vector<vector<T>*>
55:名前は開発中のものです。
15/01/18 12:44:37.58 sJaCX/+8.net
生ポインタ使うならdequeで良いだろ
とは言えないパフォーマンス差があるんだよな…
56:名前は開発中のものです。
15/01/18 13:35:03.38 yNPMG51i.net
vector<unique_ptr<T>>
57:名前は開発中のものです。
15/01/18 14:23:19.06 J6J53lAj.net
null_ptr
58:名前は開発中のものです。
15/01/18 15:20:17.44 W1O9uyd7.net
nullptrでは・・・
59:名前は開発中のものです。
15/01/18 15:53:55.88 dWFx6RaG.net
相当昔にC++触って、今と環境がかなり違いそうなのですが、
タスクシステムを実装する時、昔は固定長のメモリを予め確保したうえで、そのメモリを
newすることによって使っていたのですが、今のゲームもこのやり方が主流ですか?
それともスマートポインタ+std::listでも速度出るのでしょうか?
スマートポインタとやらは、これはやってる事はガベージコレクションですよね?
速度に問題無しということですが、ヒープ領域から自由にnewdeleteして大丈夫なのかと不安になるのですが・・・
60:名前は開発中のものです。
15/01/18 16:23:04.34 6LkKK9Db.net
誰も使ってない
61:名前は開発中のものです。
15/01/18 17:19:29.87 W1O9uyd7.net
>>57
スマートポインタはリソース管理の安全性を高めるだけで、
new、deleteのパフォーマンスを高めるわけではない。
むしろクラス被せる分、オーバーヘッドが嵩む。
現代のハードウェア環境においては、多くの場合そのオーバーヘッドは問題にならないというだけ。
62:名前は開発中のものです。
15/01/18 18:04:36.15 WcZ4waH9.net
手動解放は、車で例えると
タイム短縮のためにわずかなエンジンパワーのロスも許されないプロレーサーや、
オートマはエンジンパワーが完全には伝わらないのでクソ
俺は完璧なギアチェンジ操作ができる(自称含む)のでマニュアルで通すんだって人向け
解放忘れてメモリリーク他の面倒な問題を起こしても泣かないなら全部手動で
それが嫌なら我々が作った処理班にぜひおまかせ下さい!
スマートポインタってそういうもの
shared_ptrやweak_ptr自体の書き忘れや循環参照などは防げないけど
>>55
ga
63:名前は開発中のものです。
15/01/18 19:56:46.03 1ZXKy9PG.net
>>57
ここではWindowsならメモリ確保の負荷はそんなに問題にならないとしている
URLリンク(marupeke296.com)
スマートポインタはGCってそれどういう意味だよ。
スマートポインタに使っている参照カウントはGCの方式の一つとは言えるが。
URLリンク(ja.wikipedia.org)参照カウント
64:名前は開発中のものです。
15/01/18 20:33:19.91 E2jV+3+x.net
おじさんは2万円前後の安もんの8インチタブ(CPU:Z3735G,RAM:1GB)を
即売会場でデモ機として使う都合で、バッテリー駆動でできるだけ長時間
ヌルヌル動かすために貧乏根性丸出しな組み方しちゃったけど、そういう
変な目的が無ければ自分の好きなようにやればいいと思うんだがな
○○のやり方が大丈夫なのか不安とか意味わかんねぇな。周りキョロって
ねぇで自分で決めた基準動作環境で自分でテストすればいいじゃんと
65:名前は開発中のものです。
15/01/19 05:04:21.05 xLKHfZFD.net
最近は底の方でも1GB
これなら多少雑に使ってもリークさえさせなければ問題ないな
なお512MB以下は爆死する模様
そんな化石がまだあるのかどうかは知らないが
66:名前は開発中のものです。
15/01/19 08:44:27.43 XDjCkDzP.net
全部起動時に読み込みとかやめて!
67:名前は開発中のものです。
15/01/19 19:59:00.97 21R5SuXr.net
ふははは、貴様のセルを使うかどうかもわからない画像や音楽データで埋めてくれる!
読み込み時間といい、占有領域といい、ロースペにはある種のテロだな…
68:名前は開発中のものです。
15/01/19 23:27:21.97 U55o2asL.net
音楽やムービーのストリーム再生以外で、オンメモリでないゲームが作れるって凄いな。
そこまでリソースが用意できないよ。
69:名前は開発中のものです。
15/01/20 00:33:47.17 KjcEBQWF.net
メモリ次第ではあるけど
常駐とブラウザ合わせたら警告食らうくらいのゲームならあるんじゃないの
70:名前は開発中のものです。
15/01/20 01:29:50.61 VPdLWQW0.net
>>66
数年前、(旧)Android Marketに個人でゲーム出した時は機種依存の
バッドノウハウの量に本気で吐き気がしたけど、あれに比べたら
PCゲーは作りやすい思たよ。メモリフットプリント小さくするだけで
おkなら大したこたないと思える程にAndroidスマホはカオス
(だった。今はどうなってるのか知りません)
71:名前は開発中のものです。
15/01/20 10:35:24.77 B8GspOPa.net
1080pの画像を一度に100枚読み込めばロード地獄間違いなし
1920*1080*4 /1024/1024 *100 = 791MBぐらい
スマホだとアプリが強制終了するかも
グラフィックの豪華なアプリのModern Combat 5でもメモリは512MBぐらいまでしか使わない
72:名前は開発中のものです。
15/01/20 22:05:53.74 GnwjxLXH.net
圧縮テクスチャ使えば1/5くらいにはなるんじゃね?
73:名前は開発中のものです。
15/01/21 16:36:27.53 OnV6g/fE.net
そういや、Appmethodってどうよ?ちょっと気になってるんだが使ってる奴居る?
74:名前は開発中のものです。
15/01/21 22:17:40.75 1wPj2se9.net
タスクシステムで組む時、
・タスクリスト2つ用意して移動と描画分ける
・タスクリスト1つに移動も描画も入れる
どっちがいいのでしょうか?個人的には前者にしたいけど・・・
75:名前は開発中のものです。
15/01/21 22:19:47.80 CqaY5thk.net
前者にしたいのにできない要因を考えるのがよい
「みんながどうやってるか気になる」ってだけなら気にする必要はない
76:名前は開発中のものです。
15/01/22 00:52:45.85 fqCV4qez.net
タスクシステムはバグった時に大変そうな印象
そりゃあ、バグれば大抵それなりに大変な目に遭うんだけどさ
77:名前は開発中のものです。
15/01/22 02:20:52.62 PxEmvatE.net
>>69
一般的なアプリは、数MB
78:名前は開発中のものです。
15/01/22 07:47:04.58 niGIPEW3.net
昔タスクシステムスレあったけど相手の主張への罵詈雑言だらけでいつの間にか消えたなw
79:名前は開発中のものです。
15/01/22 16:27:46.03 pRLOyuNi.net
移動と描画両方持ってたほうがスマートだべ
80:名前は開発中のものです。
15/01/22 16:50:32.20 MBqyL5iH.net
>>76
「タスクシステム」っていう名前が何を指すのかがすごく曖昧なのに
それを無視して自分の中の定義を押しつけ合う奴らの隔離スレだったし
消えて当然とも言える
81:名前は開発中のものです。
15/01/22 17:35:35.81 niGIPEW3.net
まあ個人でゲーム作る分にはどう作ろうが60FPS出てちゃんと動けば勝ちだからなw
会社とかで厳密にタスク管理されてるなら覚えなきゃならんのだろうけど。
82:名前は開発中のものです。
15/01/22 18:57:21.14 gduwMt/g.net
タスクシステムw
馬鹿しか使わん
83:名前は開発中のものです。
15/01/22 21:08:37.90 9AIymZEw.net
>>80
なんで?
84:名前は開発中のものです。
15/01/22 21:13:16.12 ZmYkrSmS.net
>>80
OS上で動くアプリならそうかもな
OS込みとしてならタスクは最適解だろうし、組み込み系で使われてるOSは名前が違うだけて同じ系統のものだよ
現在マイノリティなのは認めるけどな
85:名前は開発中のものです。
15/01/22 22:06:24.79 MBqyL5iH.net
ほーら始まったw
スレ立ててそっちでやれw
86:名前は開発中のものです。
15/01/22 23:18:22.87 MosgWt8b.net
たすくしすてむってなあに?
おいしいの?
87:名前は開発中のものです。
15/01/22 23:53:50.36 hRTvuKPH.net
ごめんなさい
反射してしもた
88:名前は開発中のものです。
15/01/22 23:56:43.23 U49zokjS.net
だーかーらー、ただのリストに大げさな名前付けんなや
89:名前は開発中のものです。
15/01/23 00:49:17.98 jY3sOyRC.net
URLリンク(ja.m.wikipedia.org)プロジェクト
多少は勉強になるから、読んでみたらどうだろう
これの亜流だよ
90:名前は開発中のものです。
15/01/23 01:07:05.72 JihQada2.net
はじめからほとんど完成しているシステムに、
そのシステムの中枢部に触れないように要素を追加できるような実装を目指すなら有効
つまり、OSやエンジン作るならこれがいいかもしれない
が、そうでなければバグが修正困難だったり無駄な手続きが多いクソ
なんだ実行順って 必要になった時にやらせろオラァァ
91:名前は開発中のものです。
15/01/23 10:32:52.67 ZhBY7M7O.net
最近はどんな言語でもクロージャやジェネレータ (yield) をサポートするようになってきた。
タスクシステムとは呼ばれないけど、同じ目的には使えるんじゃないの?
描画に関しては、オブジェクトが自前で描画命令を発行するのか、
オブジェクトとは別にスプライトのような構造
92:を用意して、描画はそちらに任せるかの差が大きい気がする。 巷のゲーム向けのフレームワークを見るに、後者のほうが可搬性は優れているんじゃないか?
93:名前は開発中のものです。
15/01/23 10:52:38.49 ZpK8PG+c.net
オブジェクトが自前で描画って構造はゲームではあり得なくない?
ポーズ作るだけで一苦労じゃん
94:名前は開発中のものです。
15/01/23 16:09:48.65 gTjNx7m+.net
ネットに転がってるC++のゲームソースしっかりしたのはほとんどタスクシステムっぽいのばっかだから
そういうソースじゃないと読む気がしなくなったっていう(´・ω・`)
95:名前は開発中のものです。
15/01/23 16:29:50.12 Qg1gWf/N.net
単一のタスクだけで動かすと実によく機能するのに、
タスク同士を連動させようとすると途端にギクシャクする辺りが
実にぼっちらしくてよいが、
プログラムにそんなのやらせてどうするんだ
96:名前は開発中のものです。
15/01/24 11:10:33.23 vN0iK6Pw.net
>>90
cocos2dとかそんな感じじゃね
97:名前は開発中のものです。
15/01/24 13:26:12.19 AuIVSu3m.net
C++11のstd::asyncってのが便利そうだから使ってみた。
確かに簡単に別スレッドに非同期に仕事をさせられる。
だが、どうも処理結果を受け取ってスレッドを終了するのに膨大なコスト(500msくらい)がかかるようだ。
代わりに、std::threadで常時スレッドを走らせておいて、std::mutexで同期を取りながら
データのやり取りをするようにしたらとてもスムーズに動くようになった。
しかし、std::asyncを使った場合と比べて、煩雑な記述が避けられない。
スレッド終了のコスト高杉。
98:名前は開発中のものです。
15/01/24 13:34:42.36 0N2Bqsd3.net
TBBやPPL使っとけ
99:名前は開発中のものです。
15/01/24 16:36:58.01 l++ObWZB.net
>>94
Windowsの話だよな?
100:名前は開発中のものです。
15/01/24 20:09:43.23 Js5qaCaY.net
C11使っとけ
101:93
15/01/24 21:51:42.90 AuIVSu3m.net
>>95
サンクス。
調べてみる。
>>96
そうだよ。
102:名前は開発中のものです。
15/01/24 22:06:18.60 SL/s5qpu.net
1タスクごとにスレッドそのものを開始終了するとコストが高いので
想定するCPUのコア数だけワーカースレッドを用意して
それらにタスクを投げるのが定石じゃないかな。
・キューにタスクがない時はスレッド待機。
・タスクをキューに投げたら全ての待機スレッドを励起。
・いずれかのスレッドがキュー上のタスクを取得して実行、他は再び待機。
・タスクが完了してもスレッド完了せず、次のタスクを確認する。
デザインパターンにあったはず。
103:名前は開発中のものです。
15/01/24 22:12:29.49 VTrvOh2Q.net
>>71
居ないのか……ま、いいや
104:名前は開発中のものです。
15/01/24 22:16:34.35 VTrvOh2Q.net
スレッドの使い分けは適切に使わないと工数が意味もなく増殖するからな……
105:名前は開発中のものです。
15/01/24 22:31:57.37 AuIVSu3m.net
>>99
勉強になった。
やっぱそういうやり方が常套なのね。
そういや、マルチスレッドのデザインパターンってのがあるって聞いたことがあるな。
調べてみるわ。
106:名前は開発中のものです。
15/01/25 21:12:51.89 vXlhEd/U.net
タスクシステムよりシーン管理の方がよっぽど複雑だと思うの
107:名前は開発中のものです。
15/01/25 21:27:30.87 16a+UuyX.net
シーンって「タイトル画面とキャラ選択画面とゲームのメインループその他」の意?
それとも「メインループ中の各シーン」のことかな。
>>102
標準テンプレートとか使える程度に技術のある人なら余裕で実装できるよ。
108:名前は開発中のものです。
15/01/25 23:16:44.80 ZTrWlyYJ.net
シーンったら状態遷移のことでは つまり両方
109:名前は開発中のものです。
15/01/25 23:53:06.16 5N9PH1z0.net
>>99
ワーカースレッドが、キューに何もない�
110:アとを確認して、 眠ろうとしているところに、 キューにタスクが入って、ワーカーに起きるよう指示を出す。 ワーカースレッドはその後寝てしまう。悪いことに全ワーカーが同じ状態。 次のキュー挿入で起きるけど。 なんかこんなこと考えると、こんがらがってきます。
111:名前は開発中のものです。
15/01/26 15:41:45.19 VjIajR+F.net
>>106
キュー操作そのものにミューテックスで排他かけるから
「寝る」一連の動作と「起こす」一連の動作は複数のスレッドで並行に起こらない。
「寝て大丈夫かキューを確認したらタスクがあるから寝ずに実行」か
「完全に寝る→即座に次のタスクがキューにある状況で起こされる」のどちらか。
.NETだとWait()とPulseAll()、Javaならwait()とnotifyAll()で
簡単に実装できるけど、Win32APIだと少し面倒だった。
まずは上記2つのどちらかを調べて流れを掴んで、
それをC/C++用のAPIで書き表すことを考えてはどうかな。
112:名前は開発中のものです。
15/01/26 16:22:24.05 MFO6WL+3.net
>>107
condition_variable
113:名前は開発中のものです。
15/01/26 17:05:42.55 u+eqsmYT.net
*0.5の乗算と/2の除算
表す物はまったく同じだけど、前者の方が早いんだろうか?
114:名前は開発中のものです。
15/01/26 17:06:44.50 plLWVR07.net
/2の除算
115:名前は開発中のものです。
15/01/26 17:08:38.36 U+7vhN1O.net
シフト演算
116:名前は開発中のものです。
15/01/26 17:36:32.42 nJhOAZkT.net
整数ならそもそも結果が違うな
浮動小数ならコンパイラが最適化してくれるだろ
117:名前は開発中のものです。
15/01/26 17:48:01.99 u+eqsmYT.net
2のn乗倍しかできないじゃないですかー!やだー!
書き方が悪かったのは認める
118:名前は開発中のものです。
15/01/26 18:30:30.51 pS9kEcva.net
>>113
浮動少数なら変わらないんじゃ?
119:名前は開発中のものです。
15/01/26 21:04:49.69 J7eP3rC5.net
>>107
Javaや.NETはスレッド簡単に書けるんか。
C++11や今後の新しいC++規格で同じようなライブラリ入れてくんないかな?
120:名前は開発中のものです。
15/01/26 21:13:32.54 nJhOAZkT.net
>>115
すでに >>108 が答えてくれてる。
std::thread, mutex, shared_mutex(=RWLock), condition_variable, async/future
C++11, 14 にて、この手の処理のための部品は揃ったと思われる。
あくまで部品なので、タスクキューなんかは自分で多少は書くことになるとは思うが。
121:名前は開発中のものです。
15/01/26 21:19:26.58 thceLWWx.net
#ifndef~#endifの組み合わせと#pragma onceの違いがよく分からない
前者は明確なインクルードガードだけど、後者は?
122:名前は開発中のものです。
15/01/26 21:45:22.75 OIbLNO60.net
前者はガード以外にも使える
後者はガード専門
123:名前は開発中のものです。
15/01/26 21:45:26.06 eI0emMfH.net
>>117
一回だけincludeしてねとコンパイラに言う
124:名前は開発中のものです。
15/01/26 21:57:36.77 MFO6WL+3.net
ついでに言うと#pragma onceは非標準
だけど主要コンパイラで実装してないものがないほぼデファクトスタンダード状態
125:名前は開発中のものです。
15/01/26 22:06:02.39 J7eP3rC5.net
>>116
ありがとう!
C++的にはちょうど良い落としどころっぽいね。
使い易くてハイパフォーマンスなスレッド記述をマスターしてやるぜ!
126:名前は開発中のものです。
15/01/26 23:14:24.34 thceLWWx.net
なるほど、むしろ#pragma onceがインクルードガード専用なんだな
>>120
マジで!?
VSで最初から書き込まれているプリプロセッサが非標準なのかよ
127:名前は開発中のものです。
15/01/27 02:06:38.39 m3LjzbYT.net
そもそも#pragma自体が、コンパイラ独自実装な機能で使うタグみたいなのじゃなかったっけ
まあ今となっては大抵のコンパイラで使えるみたいよ
URLリンク(en.wikipedia.org)
128:名前は開発中のものです。
15/01/27 05:50:27.53 v0Ke9Ofm.net
#pragma で始まるものは、互換性がない
129:名前は開発中のものです。
15/01/27 09:41:49.82 kpJLUqPw.net
>>124
リンク先見た?
俺もVCだけの互換の無い機能と思っていたが、互換してないのはIBMの一種(世の中のコンパイラを網羅してるわけではないけど)だけだったよ
標準仕様が~とかよりも便利なモノは取り込まれてくんだと思った
130:名前は開発中のものです。
15/01/27 15:08:16.08 m3LjzbYT.net
まあ#pragma comment(lib, "...")とか、ガチでVC独自の機能もあるし
>>124の考えが自然だと思う
131:名前は開発中のものです。
15/01/27 17:35:37.67 OmLGS6W/.net
C++14の新機能ってラムダ式にautoが使えるくらい?
132:名前は開発中のものです。
15/01/27 22:54:28.14 k1Z1zLml.net
>>126
なぜ comment なのだろう…
133:名前は開発中のものです。
15/01/27 23:27:04.08 Ow2H94g+.net
互換と呼ばれるパクリ・盗用
134:名前は開発中のものです。
15/01/27 23:51:44.84 mO8GdU7r.net
パクりパクられないインタフェースに存在意義は無い
135:名前は開発中のものです。
15/01/28 00:13:05.10 5x2afQiV.net
ただのガラパゴス仕様だからな…
136:名前は開発中のものです。
15/01/28 08:57:20.61 DPC05MEk.net
C++は消える運命
137:名前は開発中のものです。
15/01/28 10:44:43.26 SOs+ZJbg.net
C++は地盤担当だから消えはしない。見えなくなるだけ。
138:名前は開発中のものです。
15/01/28 16:49:43.54 /ZB0USJc.net
土台のしっかりしている家は頑丈だからな
しかし最近、犬小屋程度の建物にビルのような土台を作ってどうすんだ?
と思うようにもなってきた
139:名前は開発中のものです。
15/01/28 17:10:45.12 dUb4vLHi.net
ウサギ小屋と呼ばれる日本の家をバカにするな!
140:名前は開発中のものです。
15/01/28 19:20:53.89 nasZb7nZ.net
最近ホント、この板でこじつけで日本の風習をバカにする奴が増えたな。
レガシで安定したものはラップして使い回すのが鉄板なのに、
横からうまく吹き込んで全部潰して一から作り直そうとさせる。
それだけ、相手の発展を遅らせることができる。
141:名前は開発中のものです。
15/01/28 19:28:52.88 tBFCEOiA.net
古いからといってバグが無いとは限らないけどな。
特に昔のコードは脆弱性対策が練られてない事が多い
142:名前は開発中のものです。
15/01/28 20:15:35.81 RgnZVm9M.net
FirefoxはJavaScriptの速度がChromeを超えたとか言われている割にもっさりしている感が否めない
後発のChromeの方が速い
143:名前は開発中のものです。
15/01/28 20:18:09.19 t3hT+Wje.net
>>138
感覚でなく実測で。
144:名前は開発中のものです。
15/01/28 20:33:36.08 RgnZVm9M.net
ブラウザの使用感はスクリプトの実行速度だけで決まるわけじゃないからな
読み込み時間の短縮も大事
v8の方がバイトコードを通さず直接マシン語を生成するから読み込み速いんじゃないか
全体の速度はTom's Hardwareが調べていたが
スコアを合計したら何かFirefoxが速いという結論になっているのが理解できなかった
どんな計算をしたのやら
URLリンク(www.tomshardware.com)
古い記事だけど
145:名前は開発中のものです。
15/01/28 20:35:32.45 GO27aJnJ.net
関係ないけど体感速度を速く感じさせるって大事な事だね
Chromeはメモリの使い方や優先順位の割り振りが上手いんじゃないかと
146:名前は開発中のものです。
15/01/28 21:30:30.57 zOtKlcou.net
chromeはメモリ馬鹿食いするしな
ブラウザしか起動しないならそれでもいいんだが
147:名前は開発中のものです。
15/01/28 23:41:47.26 gWUJCc9x.net
わずかな妥協さえ許さずチューニングに血道を上げ
DNSの応答時間すら惜しむ
そりゃ比べる相手が悪すぎる
148:名前は開発中のものです。
15/01/29 00:04:26.59 iAJNBuYX.net
0.3を0.1にする前に,10が1になるツールを作ろう
149:名前は開発中のものです。
15/01/29 08:56:31.18 KH1X7ZAq.net
メモリが多めのマシンだとChromeが最速だろうね
逆にChromeでメモリ不足に陥るマシンなら最速はFirefoxセーフモードかと
150:名前は開発中のものです。
15/01/29 09:36:37.60 6+mjNHtZ.net
FirefoxはブックマークとかタブとかRSSあたりが使いやすい
あとはDuckDuckGoに対応してたりとか
まあ好きな方使えばいいんじゃない?
151:名前は開発中のものです。
15/01/29 10:09:11.55 c6VwBThb.net
Chromeの最低動作環境は一応メモリ512MB
タブをいくつ同時に開けるのか分からないが
152:名前は開発中のものです。
15/01/29 11:20:16.55 XKuc65oW.net
JavaScriptとブラウザの速度が一緒くたにしてる。
ChromeはJavaScript不使用であってもメモリ食う。
ChromeにIE,FirefoxのJavaScriptエンジン搭載したらメモリ消費が減ると思えん。
153:名前は開発中のものです。
15/01/29 13:39:58.83 c6VwBThb.net
ブラウザ全体が確保したメモリを使いまわしているのだろう
新しいのページ等はHTML5で書かれているので実質JavaScriptを完全にオフにはできない。
v8もメモリが十分にある環境だとメモリ使用量が200MBを超えたぐらいにならないとGCされない。
154:名前は開発中のものです。
15/01/29 13:45:00.34 au4Qd8+o.net
C++でブラウザゲーム開発?
155:名前は開発中のものです。
15/01/29 15:54:12.53 PqqQ3LUQ.net
ただの荒らしでは?
156:名前は開発中のものです。
15/01/29 19:20:51.28 QDO0WN3U.net
>>150
emscripten?
157:名前は開発中のものです。
15/01/30 17:01:12.20 1O7TniCL.net
「国産フリーゲームの舞台をPCスタンドアロン(主にC++)から
ブラウザゲーム(クラウド、HTML5)やスマートフォンアプリ(非C++多)に移行」
させようという思惑を、最近この板でひしひしと感じる。
158:名前は開発中のものです。
15/01/30 17:49:20.89 Uwc5t0gr.net
エサに飢えたスマホ厨や企業やその信者のステマ工作員だろ ほっとけ
159:名前は開発中のものです。
15/01/30 17:52:07.48 9l7Lplvm.net
スマホはAppmethodというC++環境もあるが?
160:名前は開発中のものです。
15/01/30 18:28:39.45 cceEvulu.net
一般企業 : C++って難しいんでしょ?
奴隷商人 : 新しいxx言語やツールを使えば簡単ですよ
奴隷商人 : C++なんか使う必要ありません
奴隷商人 : 素人でもちょっと勉強すれば使えますよ
奴隷商人 : わが社では優秀なxx言語エンジニアを多く確保しています
奴隷商人 : 非常にリーズナブルな値段で派遣できますよ
一般企業 : じゃあxx言語とツールで開発するからnn人派遣して
奴隷商人 : まいどw
奴隷商人 : さてと在庫減ったし新しいボンクラ雇うかな、安い金でw
奴隷商人 : Appmethod? ボンクラがC++使えるわけねーだろw
奴隷商人 : うちは安さが売りなの
C++プログラマ : 仕事ないすか?
一般企業 : うちはxx言語とツールで開発するからC++いらないよ
一般企業 : C++高くつくし
ユーザ : みためはそれなりだけど、手抜き感ありありのクソゲー増えたな
ユーザ : 今売れてる○○なんか△△をパクッて版権キャラゲーにしただけだし
ユーザ : そのくせバグが多くて元の△△より面白くない
161:名前は開発中のものです。
15/01/30 18:54:29.18 8M4ey3DN.net
まいどw
162:名前は開発中のものです。
15/01/30 19:11:37.72 WJ9MDokc.net
>>156
C++でも買い叩かれる
163:名前は開発中のものです。
15/01/30 20:07:26.54 eOqAWtJ/.net
(給与だけなら)Python最強、C++は微妙
プログラミング言語別求人給与額の第2位はRuby、第1
164:位は? | 開発・SE | マイナビニュース http://s.news.mynavi.jp/news/2014/11/04/084/
165:名前は開発中のものです。
15/01/30 20:33:11.20 8M4ey3DN.net
>>159
件数の軸だけ見ると、Javaが断トツなんだな。
ま、自分はC++しかしないけど。
166:名前は開発中のものです。
15/01/30 21:50:27.80 xDmuU9zY.net
民度が高過ぎる(笑)。
自分は案件減や開発コスト軽減からC#やPHPに日和ってしまってるけど
やっぱりちゃんとC++で「アセンブラレベルで何が起こってるか」意識した
プログラムしないとダメになっちゃうかもね。
167:名前は開発中のものです。
15/01/30 23:02:06.31 8M4ey3DN.net
>>161
C++は遣り甲斐があるぞ~、と誘惑してみるw
168:名前は開発中のものです。
15/01/30 23:29:11.58 lEERAgAH.net
正直C++もC#も言語使用は簡単でしょ?
問題はオブジェクト指向とかアルゴリズムじゃないの?
169:名前は開発中のものです。
15/01/30 23:48:33.71 mPLLQnOv.net
ラインパーティクルみたいな細長くて透明な部分があるテクスチャが
交差するときって
どうすればいいですか?
というか、Zソートってテクスチャが貼られた面の重心を使ってやるんですか?
170:名前は開発中のものです。
15/01/31 00:04:49.27 XljQIOh1.net
メモリを意識して書かないといけないのはC/C++くらいでないの
メモリアドレス扱う言語って他になんかある?
171:名前は開発中のものです。
15/01/31 00:15:01.69 vx9WzsVv.net
>>163
C++は根底にCとしての組み込み系やら、ドライバとかの知識が有るかどうかでかなり変わると思う
まーもうニッチな世界になってしまってるけど、ゲームに絞るとコンシューマとかで何かを極めようとしたときに需要は有るかと
172:名前は開発中のものです。
15/01/31 00:23:27.83 08SnV/iE.net
ZソートってZバッファのかわりに遠い方から描くって意味?
厳密にやるなら、ポリゴンを無限平面とした場合に交差する他のポリゴンを
交差する線で分割する処理をすべてのポリゴンにして
って文章で書いてもわかりにくいな。
分割のあとは2分木のクイックソートで、あるポリゴンの面から見て
別の比較するポリゴンが手前側か向こう側でソート判定する。
多分それなりに有名な方法と思うから検索すれば見つかると思うけど
手法の名前は知らない。
あと、赤黒木でもできるのかしらない。
173:名前は開発中のものです。
15/01/31 01:24:39.63 vx9WzsVv.net
プレステやらサターンの時のZソートなら、重心か頂点の順番忘れたが二頂点のZ値を加算したものでソートしてたよ
でも組み込み方としては実際にソートではなく、リスト構造で管理してたと思う
だから解像度が低いとバキバキになってた
wソートってのも出たけど、流行る前にZバッファでパフォーマンス出るようになって無くなったと思う
174:名前は開発中のものです。
15/01/31 01:26:13.53 H+AZbHjO.net
>>168
wソートってのがあったのかw
興味深いw
175:名前は開発中のものです。
15/01/31 02:31:32.35 MYAY0/XK.net
>>162
じつはC#でXNAやってたんよ。
C++に戻るということは、ここ数年で作った自分ライブラリと
そこから呼び出しているXNAライブラリをDirectXに移植することを意味する。
けっこう大変だったり。
あとMonoGameが実用に足りるようになったらC#のままの方が楽というのも
正直、ある。C++でクロスプラットフォームの3Dライブラリがあれば
別なんだけど…。
176:166
15/01/31 02:34:23.55 08SnV/iE.net
> 手法の名前は知らない。
多分、BSPツリー法だと思う。wikipediaにバイナリ空間分割でのってる。
wソートってどんなのかちょっと興味あるけど、説明されても難いと読ま
177:ないだろうなw
178:名前は開発中のものです。
15/01/31 05:16:44.71 dLJDPFMl.net
>>171
wバッファなら下にあったけど。たぶん今はwバッファとは呼ばない。
URLリンク(webcache.googleusercontent.com)
wソートははじめて聞いた。
179:名前は開発中のものです。
15/01/31 08:12:54.84 e0isyZ8t.net
C#ってある意味理想的な言語だよね
・オブジェクトはすべて参照渡し
・値は参照渡しは出来るが参照で持つことはできない
・共有したい変数はクラス(構造体)にする
180:名前は開発中のものです。
15/01/31 08:17:29.88 XljQIOh1.net
VBもそんな感じじゃなかったっけ
181:名前は開発中のものです。
15/01/31 12:13:09.01 H+AZbHjO.net
>>172
おお、川瀬さんのページか。
清水さんと交流あったんだな。
>>173
>・共有したい変数はクラス(構造体)にする
C#がやたらクラスだらけなのはそういうことだったのか・・・
182:名前は開発中のものです。
15/01/31 12:39:15.50 jayN4xwq.net
C#って、構造体の参照渡しで「メソッド側で書き換え不可能」指定ができないのが難。
ref:入出力を兼ねる参照渡し
out:出力のみの参照渡し(意外と便利)
C++のconst 型 *やconst 型 &がないと言えばいいか。
183:名前は開発中のものです。
15/01/31 12:44:18.35 dP8uz4HA.net
Wソートってもしかしてローカルな話だったのか?
Zソートはリストだって話を書いたけど、そのリストを更にソートすることで込み合ってる部分を細かく前後入れ換える事で若干バリバリを押さえる感じだった
当時は描画よりも演算の方が圧倒的に早かったのとダブルバッファやトリプルバッファでの空き時間を有効にって感じだったよ
でも自分では研究以外では使ってない
理由は当時は整数演算だったから、ほとんど効果が感じられなかったから
184:名前は開発中のものです。
15/01/31 12:46:07.85 ehZNZ4NM.net
書き換えなきゃ良いだけだろ
なんでそんな事を言語仕様に入れなきゃならないんだ
185:名前は開発中のものです。
15/01/31 12:51:54.53 vx9WzsVv.net
>>178
書き換えちゃダメって言っても書き換える人が居るから言ってるんだと思うよ
全員自分なら楽な話だけどさ
186:名前は開発中のものです。
15/01/31 12:55:33.58 jayN4xwq.net
あ、連投ごめん。
上のリンク先とMSの解説で、ZバッファとWバッファの意味が逆になってる気がする。
URLリンク(msdn.microsoft.com)
リンク先は「割るほうがWバッファ、割らないほうがZバッファ」、
MSだと「割るほうがZバッファ、割らないほうがWバッファ」に読める。
用語の混乱があるのか、自分が何か勘違いしてるのか。
で、Wソートって何?
昔のPSみたくバッファリングしないでポリゴン単位でソートするけど、Wでやるってことかね。
187:名前は開発中のものです。
15/01/31 13:05:31.10 +0dbs7Ey.net
const必要になるのはライブラリ作成とかチーム開発とかだろうし
ひとりでシコシコ作ってる分には別に不便もないよな
コーディングルールは自分ルールだし
188:名前は開発中のものです。
15/01/31 13:12:28.57 H+AZbHjO.net
自分も、自分用プログラムばっかり作ってて、const利用はハードコーディングな定数以外は0。
自分以外を考慮に入れると、たしかにconst修飾子は重要になると思うけど、
ある程度小規模なチームなら、ルールで十分賄えると思う。
189:名前は開発中のものです。
15/01/31 14:06:11.93 9fyUH/Hj.net
struct, classのコピーを避けるために参照・ポインタを多用してると確実にミス出るし
constは値を中身を書き換えない保障でもあるから、内部処理を忘れたときとかに役立つ
190:名前は開発中のものです。
15/01/31 14:13:16.03 ehZNZ4NM.net
オブジェクトの参照を渡し�
191:ス時に中身を書き換えてくれるなよ、という要求はある それをC++のようにconstで表現するのがいいかどうか C#ではイラネってなったし要らないと思う
192:名前は開発中のものです。
15/01/31 14:18:46.16 4UKOkNc6.net
ところで、const 同士の operater== は operater==(const) const; でいいのか?
最後の const で数時間悩んだんだが。ゲーム以外のところで…
193:名前は開発中のものです。
15/01/31 14:47:44.78 g0EkdIoS.net
friend operator == (const&, const&)
194:名前は開発中のものです。
15/01/31 15:27:49.35 PEZyYsg9.net
URLリンク(jbbs.shitaraba.net)
195:名前は開発中のものです。
15/01/31 16:27:45.39 4UKOkNc6.net
あー、ここで friend 使うのかサンクス。スレチすまん
196:名前は開発中のものです。
15/01/31 19:40:50.51 LvLYpCGK.net
単に規約の問題だけじゃなくて。
constというかC#のreadonlyは構造体にも指定できるんだけど、
それを先述のref指定でメソッドに渡せないんだよ。
既存のライブラリでref指定(参照渡し)になっているものが
少なからずある。まあ別の変数に代入してから値渡しできるんだけど、
微妙にパフォーマンス落ちるでしょう。
197:名前は開発中のものです。
15/01/31 22:35:54.52 g0XZBTK4.net
const無しをデフォルトにしてしまうと,引数先で書き換えるのかどうか,引数からわからなくなるから
基本はconst参照だよね
198:名前は開発中のものです。
15/01/31 23:12:04.08 IlaPMJGi.net
constなしの参照だとrvalue取れないし。
全部コピー渡しですかそうですか
199:名前は開発中のものです。
15/01/31 23:45:24.01 +0dbs7Ey.net
const付けたらコンパイル時に置き換えられるの?
200:名前は開発中のものです。
15/02/01 02:38:02.64 HEaS08Xq.net
#defineした変数をconstするとどうなるのっと
201:名前は開発中のものです。
15/02/01 09:04:46.33 4SXpmV3a.net
>>189
たまにそういうシチュエーションがあるけど、それを解決するために言語使用に手を入れるのは言語道断
202:名前は開発中のものです。
15/02/01 16:13:17.17 7SDWQ5Km.net
>>192
intとかならそうなんじゃないかな。
でもconstで定義されるのがクラスインスタンスの場合、
実行時に生成されるのでは(恐らくクラスに最初にアクセスした時)。
>>193
>#defineした変数
#defineはプリプロセッサで置換されるマクロに過ぎないよ。
203:名前は開発中のものです。
15/02/01 16:38:17.15 5cTwIokB.net
>>193
お前のconstでコードがやばい
204:名前は開発中のものです。
15/02/01 16:38:49.06 gTwIs5aq.net
template初めて使ったんだけど引数側に同じtemplate型があれば、
返り値をわざわざ指定しなくてもいいの?
↓こんなん
template<typename T>
T zeroCheckException(T t){
if(t == 0)throw;
return t;
}
205:名前は開発中のものです。
15/02/01 16:44:02.52 wN5YVAib.net
>>197
2つあるTはどちらも同じ型なんだから、むしろ指定できたらダメだろ
引数と同じ型を返す関数、という意味になっている
引数から推測できない型を返したいなら、typename を2回書けばいい
template < typename R, typename T > R convertTo(T t) { return ... }
string r = convertTo<string>(123);
206:名前は開発中のものです。
15/02/01 16:59:29.96 7TQeJfVA.net
>>197
>>返り値をわざわざ指定しなくてもいいの?
多分質問の意味からだと、返り値を引数と同じ型(T)で返したいなら返り値(の型)の宣言は必要
その部分はtemplateとは関係のない関数宣言の話で、template内はTと言う型が使えるようになっているだけだと思って関数を宣言すればOK
だから、その関数が返り値を返す必要がないならvoid、intを返したいならintになる
207:名前は開発中のものです。
15/02/01 17:45:05.57 bGERJtUD.net
typenameとclassってどっちがモダンなん?
あるいは使い分けが必要?
208:名前は開発中のものです。
15/02/01 19:03:59.15 gTwIs5aq.net
URLリンク(ideone.com)
URLリンク(i.gyazo.com)
一度変数にしないと、とんでもない数値になるんだけどさっぱりわからない
計算してるわけじゃないから桁あふれで無いと思うんだけど
209:名前は開発中のものです。
15/02/01 19:05:18.65 gTwIs5aq.net
>>198,198
なるほど、ありがとう
210:名前は開発中のものです。
15/02/01 19:24:29.40 aP8gwvz+.net
>>200
常にclassを使用していて困ったことがない
211:名前は開発中のものです。
15/02/01 19:33:48.11 2nnmtHZB.net
class使ってる人を見たことがない
212:名前は開発中のものです。
15/02/01 19:36:58.64 mV3TuxIT.net
>>201
ideoneに張る意味ねえな。
最低限実行出来るようにしてから張れ。
その過程でここで質問するまでもなく解決することもある。
213:名前は開発中のものです。
15/02/01 19:53:30.95 I530QHNw.net
>>201
11行目のgetPositionをnextPosにしても駄目?
評価順は正しいとは思うけど最適化とかキャッシュとかで狂ってるのかな?と思いました
しかし、難読化してるようなソースだな…
214:名前は開発中のものです。
15/02/01 20:01:18.83 mV3TuxIT.net
>>201
ヒント
unitListが標準コンテナだとするとsize()の返す型はsize_t
多くの処理系でsize_tは符号無し
1-2uの結果は?
215:名前は開発中のものです。
15/02/01 20:12:12.40 2nnmtHZB.net
そんな問題じゃねーよw
216:名前は開発中のものです。
15/02/01 20:29:03.32 mV3TuxIT.net
>>208
(゚Д゚)
217:名前は開発中のものです。
15/02/01 20:46:24.29 eIbULHuy.net
>>200
これは俺ルールだが、
typenameはbool, int, doubleとかも使いたいとき
classはクラスだけでいいとき
218:199
15/02/01 22:08:02.18 0xVgzIN+.net
>>203>>204>>210
見事にバラバラだなー
219:名前は開発中のものです。
15/02/01 22:50:33.72 /xEMpT1p.net
classしか使わない派だが,template自体あまり使わないことにしてる
220:名前は開発中のものです。
15/02/01 22:52:09.95 UZAipjiA.net
自分はtypename派だな。
classに限定しない使い方が多いからというのがあるけどね。
ま、組み込み型も一種のクラスと見做せないことはないし、文字数少ない分、classのほうがいいかもしんないけど。
221:名前は開発中のものです。
15/02/02 00:06:09.93 WStqUBYk.net
もはやゲーム関係ない気がするのはミンナニ ナイショダヨ
222:名前は開発中のものです。
15/02/02 01:35:39.62 g0RkpJRz.net
て、テンプレ使えれば前以上に楽ができるかもしんないし!
なお移植性が壊滅的に下がる模様
223:名前は開発中のものです。
15/02/02 04:07:49.86 lvNA0Ulc.net
テンプレート使って移植性が下がるってここの住民は一体いつの時代に生きてるんだろうか
224:名前は開発中のものです。
15/02/02 08:53:14.68 9YOvsS+B.net
俺もテンプレート自体使わないな
過去の遺物だろあれ
225:名前は開発中のものです。
15/02/02 09:10:16.63 QEPcxUVH.net
>>217
ダメだこいつ…早くなんとかしないと
226:名前は開発中のものです。
15/02/02 09:50:21.86 pbbvOQ2U.net
VSのバージョン上がるたびにどこかしらテンプレートで書いたところの書き直しが待ってるんだよな
MPLに手を出すと他の処理系でまた違う方言で困るし
227:名前は開発中のものです。
15/02/02 10:05:53.54 ZKghX0zO.net
バージョン上がるたびに、ってほどテンプレートに手入ってたっけ?
むしろ、いままでコンパイルを通すためにいちいち">"と">"の間にスペースを入れていたのが
入れる必要なくなったとか、そういう方面の変更しか知らないんだけど
228:名前は開発中のものです。
15/02/02 10:33:54.29 TF5MhFQ8.net
だいぶこなれてきたから、できないことができるようにはなっても、逆は無いと思うぞ
確かにC++03時代は typename が急に必要にされてエラーになるのはあったけど
気になるなら互換性を吸収するラッパーとしてboostを使うのも手だな
229:名前は開発中のものです。
15/02/02 11:10:10.63 pbbvOQ2U.net
最近変えたところだと
enable_ifが無い頃の代替としての部分特殊化のコードが
2012では通ってたのに2013でC2753で通らなくなって
代わりにenable_if使えるからそれになって
2015でconstexprあるからそこはテンプレート要らないだろうなて状態だわ
なんでエラーなのか追いかけるの面倒だから新機能で凌いでる
boostのを最初から使えばいいんだけどライブラリのバージョンアップが面倒でね
230:名前は開発中のものです。
15/02/02 11:30:47.44 uEPb5G0x.net
テンプレートが悪いというよりVSの実装が
231:名前は開発中のものです。
15/02/02 12:44:55.25 QEPcxUVH.net
STLもテンプレートなのに
232:名前は開発中のものです。
15/02/02 13:21:17.62 ZKghX0zO.net
SFINAE周りは確かに、C++11でようやく統一仕様が策定されて多少手を付けやすくなった印象がある
>>224
テンプレートを使ってるライブラリを使うのと
テンプレートなクラスや関数を自分で作るのとは
結構隔たりがある気がする…
233:名前は開発中のものです。
15/02/02 13:54:32.94 fu9cgs9q.net
スタンダードテンプレートライブラリ(の構想・実装)が先にあってC++で実装するためにテンプレートが導入された。テンプレートはSTL実装のための道具といえる。
Standard Template Library - Wikipedia
STLのアーキテクチャの多くはアレクサンドル・ステパノフという一人の人物の手によって作られた。
1979年に彼はジェネリックプログラミングの初期アイデアを練り始め、そしてソフトウェア開発に革命をもたらす可能性を探究し始めた。
当時はジェネリックプログラミングを実際にサポートしているプログラミング言語がまだなかった。
それをサポートする最初のメジャーな言語はジェネリックユニットの機能があるAdaであった。
1987年までにステパノフとマッサーはジェネリックプログラミングの研究成果としてAdaのリスト処理ライブラリを開発してリリースしていた。
C++は当時まだ言語として未成熟ではあったものの(テンプレートはまだなく後から実装された)、より広く普及してジェネリックプログラミングの良好なサポートが提供される可能性が高いと考えられた。
234:名前は開発中のものです。
15/02/02 14:52:33.01 bbrlQEEY.net
で、結局>>201はuintの減算でオーバーフローしてるってことでいいのか?
int - uintがintにキャストされれば大丈夫そうな気がするけど
235:名前は開発中のものです。
15/02/02 15:26:46.03 u58PP6hj.net
桁あふれや型違いの時に起こる超数値に見える
236:名前は開発中のものです。
15/02/02 16:37:35.11 lvNA0Ulc.net
そんな問題じゃねーよさんが解決してくれるさ
237:名前は開発中のものです。
15/02/02 17:14:57.39 ZKghX0zO.net
直接的な解決策や原因は分からないけど、俺なら
・「unitList.size()*140」を「unitList.size()*140.0f」にして直るか確認する
・set/getPositionXを通さなかったらどうなるか確認する(当該メンバ関数の実装が自明である場合を除く)
・コンパイラの警告設定を最強にしてみて、何かメッセージが出るか確認する
あたりをやってみると思う
238:名前は開発中のものです。
15/02/02 18:13:33.41 NKDBUGQv.net
で、ゲーム制作だと意識して。
開発環境を開発中やデバッグ中に更新するとか無いだろ
移植で困ることは判る
239:名前は開発中のものです。
15/02/02 18:39:29.29 u58PP6hj.net
新しい開発環境に新規実装された要素どうしても使いたかったんだ…と推測(適当)
CやC++とはあまり関係ないけど、
一部の開発環境では、関数や変数を書いた行にコメントしとけば
カーソル合わせるだけでコメントが出るのでメモ代わりにできるな
なおソースがコメントだらけになり、よそに貼った時に失笑物のソースになる模様
240:名前は開発中のものです。
15/02/02 19:31:16.34 lvNA0Ulc.net
URLリンク(ideone.com)
ほぼ答えのヒント張っても理解できてないアホがいっぱいいるんで再現させてやったぞ
>>208
で、どんな問題だったんですかね?
241:名前は開発中のものです。
15/02/02 20:49:55.23 0Y8pqiU9.net
色々試してみたけど、オーバーフローしたuintを直接floatにキャストするのがダメっぽいね
一回intにキャストすれば大丈夫だった
int - uintはintになるってわけじゃないのね
テストコード
#include <iostream>
int main()
{
int i=3;
size_t ui = 5;
float x = i-ui;
float x2 = i - static_cast<int>(ui);
int x3 = i - ui;
float x4 = static_cast<int>(i-ui);
std::cout << x << std::endl;
std::cout << x2 << std::endl;
std::cout << x3 << std::endl;
std::cout << x4 << std::endl;
std::cout << static_cast<float>(i-ui) << std::endl;
}
242:名前は開発中のものです。
15/02/02 21:20:46.80 lvNA0Ulc.net
>>234
intで表現出来ない値をintへcastしたら桁あふれで未定義動作
243:名前は開発中のものです。
15/02/02 21:33:08.99 MkYgWBqp.net
>>235
未定義になる可能性のある演算は暗黙のキャストしてくれないって事?
244:名前は開発中のものです。
15/02/02 21:39:18.84 lvNA0Ulc.net
>>236
違う
intとunsigned intの演算結果はunsigned int
もちろんunsigned intはマイナスを表現出来ない、なので0-1uはUINT_MAXになる。(符号無し整数は桁あふれしても未定義動作ではない)
でも符号あり整数の桁あふれは未定義動作なのでUINT_MAXをintへキャストするのは未定義動作
まぁ大抵の処理系では動くだろうけど。
245:名前は開発中のものです。
15/02/02 21:57:25.95 MkYgWBqp.net
符合ありなしで演算すると符合なしになるのか
なるほどねー
246:名前は開発中のものです。
15/02/02 22:39:56.06 4aJa1XJJ.net
混ぜるな危険
247:名前は開発中のものです。
15/02/02 22:40:47.51 AAW+YNQa.net
>>239
いいねw
248:名前は開発中のものです。
15/02/03 00:10:07.19 0Nhy8xyl.net
これそもそも size_t が unsinged int なのが悪いんだよな、頭悪すぎ
249:名前は開発中のものです。
15/02/03 02:08:59.87 YnXnr0TR.net
size_tはsizeofで測ったデータの長さを受け取る物だからよ
データの長さに0未満はあり得ないから定義できないようにしてるんだろう
250:名前は開発中のものです。
15/02/03 04:00:41.53 WscpFvcA.net
質問です。
抽象クラス(親クラスとする)を継承した派生クラス(子クラスとする)を
親クラスの型のメンバー変数に子クラス型でnew()し、抽象化して保持してます。
このメンバーをdelete してすぐNULLを代入しても、参照が残ってるみたいで
エラーでる場合があります。
抽象化しているオブジェクトの削除の、お作法みたいなものってありますでしょうか。
251:名前は開発中のものです。
15/02/03 04:32:33.06 UaiJdd2F.net
>>243
スレ違いです
こちらへどうぞ
スレリンク(tech板)
252:名前は開発中のものです。
15/02/03 04:40:14.90 WscpFvcA.net
>>244
ありがとうございます。
253:名前は開発中のものです。
15/02/03 13:03:57.60 vrraL4+G.net
スレはあってるけど板が違う的な。
まあ、ゲーム関係かどうかの境目って結構曖昧だけれども。
254:名前は開発中のものです。
15/02/03 13:07:01.87 IeF+/7iv.net
いずれにしろコードもなしに質問されてもエスパーしか回答出来ないですし
255:名前は開発中のものです。
15/02/05 07:36:31.37 gQYa1HB0.net
開発期間が長すぎて、開発環境が何度も変わるのってどう思いますか?
開発環境を固定する?それともコードを書き直して対応する?
256:名前は開発中のものです。
15/02/05 08:11:52.44 6fCmneha.net
boost辺りならまだしも、言語自体のバージョンが上がるまでって
一体どんだけ開発期間が長いか間が悪いんだよ…
どうしても使いたい追加要素でもなければ変えない トラブルの素
257:名前は開発中のものです。
15/02/05 09:22:24.85 JByM0e2E.net
CSのSDKとかじゃないの?
開発序盤なら対応、終わりが見えてたらそのままってのが普通だと思うけど
258:名前は開発中のものです。
15/02/05 10:05:22.41 tVSHsnYT.net
昔VS2008から2010に上げたけど特に問題は起きなかった
259:名前は開発中のものです。
15/02/05 12:20:47.44 qWgtWrzH.net
vsの2005から2012に上げたら、Releaseでは動くけどdebugでは動かなくなった
自前で作ってた文字列クラスが弾かれたから、現在、std::wstringに置き換え中
260:名前は開発中のものです。
15/02/05 17:18:01.03 grWdPzSP.net
>>248
何年にもわたって開発を続けていくようなものなら
あんまり気にせずに変えちゃう
261:名前は開発中のものです。
15/02/05 19:05:51.48 IWRqO40R.net
iOS向けなら変えざるを得ない
262:名前は開発中のものです。
15/02/05 19:45:56.22 ckteJ+s1.net
プロの人も来てるのかも知れないけど、同人ならぶっちゃけ
DirectX9辺りの技術基盤があれば十分じゃないの。
新技術に取り組むこと自体が目的化して、ゲームを完成させる方が
疎かになってしまうって、何かありがちな気がする。
263:名前は開発中のものです。
15/02/05 22:51:52.09 EoFgZ44U.net
別に必要ないなら使わなければいいんです、エロい人にはそれが分からんのです
264:名前は開発中のものです。
15/02/06 08:51:59.99 J5odCBuG.net
だまれ朝鮮人
265:名前は開発中のものです。
15/02/06 08:53:55.71 u5/2KnVF.net
idがバグ
266:名前は開発中のものです。
15/02/06 09:00:23.95 12AknHRs.net
>>255
DirectXがそもそも出来ない人が話に混じってるだけだから気にしない方が
DXライブラリ程度でいいんじゃないかな?同人なら
自作ライブラリ作れる人ですら少ないよ
267:名前は開発中のものです。
15/02/06 11:05:36.91 vDg1pnk8.net
面白けりゃ何でもいいんだよ。
268:名前は開発中のものです。
15/02/06 14:58:45.96 1vhL8u+G.net
もとの環境で大体完成していたのに、
無理やり次世代機用に作り直そうとしたがうまくいかず、
そのまま爆死した家庭用機向けソフトのプロジェクトなら知ってる
269:名前は開発中のものです。
15/02/06 17:34:24.75 12AknHRs.net
>>261
RomからCD-ROMへの移植は苦労が多かった
ROMの容量が4Mバイト超えてるとRAMご足りなくなって、動的に入れ換えしようとするとリソースのマネージメントが大変だったから
270:名前は開発中のものです。
15/02/06 22:49:06.68 qIQhbqny.net
しかもそれだけ苦労したにもかかわらず、ロードが遅いと文句言われたに違いない…。
271:名前は開発中のものです。
15/02/07 13:13:21.00 uCqCiOK0.net
>>261
PS3だな そうに決まってる
272:名前は開発中のものです。
15/02/07 13:42:24.95 buz4BGGO.net
>>252
置き換えたらさらに別の場所が動かなかったから2013へと移行したりw
いや、ネットでは動くコードと書かれているんだよ、2013からは動くと
うちのPCで2013はマトモに動くかな?今インストール中だが
273:名前は開発中のものです。
15/02/07 14:45:09.34 84N483gz.net
ヘッダで前方宣言したはずのクラスがCandidates are: struct SimpleAudioEngineとエラーを出され
定義でreference to 'SimpleAudioEngine' is ambiguousとエラーを出されます
ヘッダではポインタしか使ってません
思うところがあるとすればSimpleAudioEngineの名前空間をusing namespaceしてるぐらいです
274:名前は開発中のものです。
15/02/07 14:58:01.00 tCXn
275:t3yJ.net
276:名前は開発中のものです。
15/02/07 16:04:21.06 ns5GMSPv.net
異なる名前空間の中で前方宣言すると別物だとみなされて
あとでusing namespaceすると区別できない
277:名前は開発中のものです。
15/02/07 19:26:49.25 buz4BGGO.net
開発環境をvs2012からvs2013に変更したのは大当たりだった
エラーの位置は分かりやすくなったし、デバッグ機能は大幅に強化されてるし、
文字列クラス(std::wstring)は扱いやすくなったし、全般的に軽くなった
278:名前は開発中のものです。
15/02/07 20:51:50.60 G8afa58Z.net
std::wstringって何か変更あったっけ?
279:名前は開発中のものです。
15/02/07 23:10:30.01 buz4BGGO.net
operaterがほとんど対応してなかったんだよ。
+=はあるのに+は無いとか、map<wstring,wstring>で使えないとか。
280:名前は開発中のものです。
15/02/07 23:18:38.16 17zrnW4A.net
ためしてないがそれはないだろ。
あとSTLやC標準ライブラリ、C++標準ライブラリは備え付けのを必ずしも使う必要がない。
実装は多数ある。
281:名前は開発中のものです。
15/02/07 23:55:35.77 tCXnt3yJ.net
たまたまインストールされてるのがVS2012だったから試してみたが普通に使えた
282:名前は開発中のものです。
15/02/08 00:06:03.58 uih1DHvo.net
あれ?って事は、vs2005を後から入れたせいでおかしくなってるのか??
283:名前は開発中のものです。
15/02/08 00:15:39.03 uih1DHvo.net
UMLのツールを買ってみて、たまたま家のVSで対応してるのが2005だけだったから、
後からインストールし直したんだよな
そっか、VS2005のコードでC++のコードが上書きされてたか
284:名前は開発中のものです。
15/02/08 00:52:07.50 iVwSBW/g.net
とんでもない話だなw
285:名前は開発中のものです。
15/02/08 01:13:03.19 sR/2PkWV.net
VC6でもoperator+位あったような気もするけど
不便な所は連続したメモリ領域の保証が無いから
実装上はともかく厳密にやろうとするとvectorじゃないとダメな所
286:名前は開発中のものです。
15/02/08 09:15:03.02 dvv+ci6w.net
連続領域かどうかに関しては
- vector C++03/11 → 連続保証
- string C++03 → 実装依存 / C++11 → 連続保証
らしいぞ。 最近のVCなら大丈夫なんじゃないかな。
287:名前は開発中のものです。
15/02/08 13:48:18.26 vuQZMEzS.net
連続性が保証されるようになっているとはな
外見は変わらなくても内部は少しづつ変わってるんだな
288:名前は開発中のものです。
15/02/08 13:51:09.60 iVwSBW/g.net
地味ではあるが重要なことだな。
289:名前は開発中のものです。
15/02/08 13:58:02.91 uih1DHvo.net
mallocのメモリ配置はOSで変わるんじゃなくてコンパイラで変わるみたいやね
290:名前は開発中のものです。
15/02/08 15:05:56.00 OpMqb989.net
依存するのはコンパイラじゃ無い
ランタイム依存
291:名前は開発中のものです。
15/02/09 20:39:13.54 q5WWprzE.net
なんにせよ、ポインタはむやみにいじらない方がよさそうね
292:名前は開発中のものです。
15/02/10 22:00:30.08 Lg1oqTmd.net
ポインタは使い勝手がわかると色々出来るが、無くても問題無くなってきてるからなぁ……
293:名前は開発中のものです。
15/02/10 23:49:52.25 2hfNPcff.net
それなりのもの作ろうとしたらアロケーター自作になるゲーム制作はポインタ必須なんじゃないの
294:名前は開発中のものです。
15/02/10 23:59:52.09 m/pIKos0.net
プラットホームによるとは思うが、いまだにカスタムアロケータなんて使うのか?
OSや言語処理系を書いているわけではないだろうに
295:名前は開発中のものです。
15/02/11 00:01:51.67 7TGiUCxx.net
車輪の再発明が好きなんだろ
296:名前は開発中のものです。
15/02/11 00:26:12.68 IKslX+U4.net
流石にOSデフォルトのアロケーターは使わないんじゃないの
ライブラリのメモリプール使うにしてもポインタは使うだろうし
297:名前は開発中のものです。
15/02/11 00:38:39.31 5bVnp7SH.net
アロケーターはC言語かSTLのやつのことだろ?
OS自体のメモリ管理はOS自体のソースからビルドしないと変更むりでは。
298:名前は開発中のものです。
15/02/11 00:41:52.28 IKslX+U4.net
普通にnew、deleteしたらOSのAPIでメモリ確保
299:するんでないの? STLはどうかわからんけど
300:名前は開発中のものです。
15/02/11 00:51:21.24 rJC6nJDr.net
>>289
mallocの置き換えぐらいリンクするライブラリー変えるだけだよ
tcmallocでググれ
301:名前は開発中のものです。
15/02/11 00:52:08.05 vZk9YDm5.net
new deleteの動作なんて実装によるとしか言いようがない
STLのstd::allocator<T>の話なら、単にnewとdeleteを呼び出す実装になってる
302:名前は開発中のものです。
15/02/11 00:59:11.50 5bVnp7SH.net
mallocやnewを置き換えてもOSの命令を使ってたら
OS自体のメモリ管理の制約は受けるわけで。
OSと完全に独立できるものか?
OSが既に管理してるところを横取りしないとならないが。
303:名前は開発中のものです。
15/02/11 01:01:23.93 WPu+kv42.net
ちょっと前に「ゲームの場合、出現オブジェクトの個数に上限を設けることが多いから
new deleteせず自分でプールを確保する手もある」という話をしなかったっけ。
とりあえずstd::allocator<T>で書いといて、あとでカスタム化してもよいのでは。
304:名前は開発中のものです。
15/02/11 01:03:22.28 5bVnp7SH.net
malloc - Wikipedia
OSのカーネルでもアプリケーションと同様にメモリ確保が必要である。
カーネル内にもmalloc相当の関数はあるが、その実装はCライブラリのものとは大きく異なる。
例えば、DMA用のバッファには特別な制限が課せられることがあるし、割り込み処理でメモリを動的に確保したい場合もある。
このため、カーネルの仮想記憶サブシステムと密に連携した malloc 実装が要求される。
305:名前は開発中のものです。
15/02/11 01:04:29.98 rJC6nJDr.net
余程特殊な用途でないかぎり既成の物使った方が速いから
306:名前は開発中のものです。
15/02/11 01:06:40.34 IKslX+U4.net
自作アロケーターは最初に領域確保してその分を切り盛りするでしょ
ていうかそれ以外の作り方を知らない
307:名前は開発中のものです。
15/02/11 01:06:46.81 rJC6nJDr.net
>>295
スレ違い
お前はゲームをOSから作るんか?
308:288
15/02/11 01:16:23.87 5bVnp7SH.net
>>288に対して、自作アロケータ、マイアロケータってのは
ほとんどのケースで、OSデフォルト、カーネルアロケータに依存してるだろ?って反応なわけで。
309:名前は開発中のものです。
15/02/11 01:32:15.63 rJC6nJDr.net
そうだな
>>288
が言ってるOSデフォルトってのが悪かった。
アプリケーションが使うメモリアロケーターの殆どの実装はライブラリが行ってる。
OSからシステムコールでブロック単位でメモリを貰いアプリケーション内で分配な。
310:名前は開発中のものです。
15/02/11 01:41:17.25 IKslX+U4.net
すんませんVC++のメモリ確保がWin32APIの関数呼ぶだけって何かで見たからそういうもんだと思ってました
311:名前は開発中のものです。
15/02/11 01:49:31.11 tga+SBCo.net
>>297
アプリケーションとしてのゲームはこれで確定だと思ってた
動的と言えば動的だけど都度都度確保はあり得ないって意味でこの手の話はスルーしてたけど、そう言うものでも無いみたいだと知ったわ
取れなかった場合の処理は思い付かないけど
312:名前は開発中のものです。
15/02/11 01:55:07.09 5bVnp7SH.net
ヒープ、動的確保は丸投げに近いが。普通のauto変数とかは最初に確保した領域を使いまわす。
メモリの4 領域
URLリンク(brain.cc.kogakuin.ac.jp)
URLリンク(brain.cc.kogakuin.ac.jp)
テキスト領域:機械語に翻訳されたプログラムが格納される. この機械語の命令が 1 行づつ実行されることでプログラムが動く。
静的領域:グローバル変数などの静的変数が置かれる。
ヒープ領域:メモリの動的管理 (C 言語の malloc 関数や C++ の new 演算子でメモリを確保すること) で用いられる。
スタック領域:今回の演習で扱ったように CPU のレジスタを一時的に退避させたり、また C 言語の自動変数 (
313:多くのローカル変数) が置かれる。
314:名前は開発中のものです。
15/02/11 02:24:49.00 COJ2IR9k.net
いわゆるメモリープールのようなものは既にランタイムに実装されてる場合もあるし
自分で実装する・しないは実行環境によると思う。
最近はこの辺のことは既に当たり前になってるのかどうか知らないけど、
検索してもあまり引っかからないね。とりあえず引っかかったところ
URLリンク(vcpp-ml.ldblog.jp)
ではVCのランタイムのソースみればとなってるので
興味ある人は読んでみては。
315:名前は開発中のものです。
15/02/11 02:41:42.58 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を上回れる。
まぁ、はっきり言って速度だけを考えると自作アロケータの必要はないかなレベル・・・と思う。
確か、スマートポインタのベンチもどっかにあったはずなんだが、どこだったか・・・
316:名前は開発中のものです。
15/02/11 02:52:05.14 IKslX+U4.net
>>304
ゲームエンジン•アーキテクチャ(ソフトバンククリエイティブ)によれば、デフォルトのnewが遅い理由は管理コストとOSのコンテキストスイッチとあるけど
URL先の内容からすると最初に確保された分越えなければコンテキストスイッチは発生しないって事なんかな
ていうか2000年の時点でそういう仕様だったのか
317:名前は開発中のものです。
15/02/11 02:52:16.60 rJC6nJDr.net
>>305
その自作アロケーターって複数スレッドから呼んでも大丈夫なように作ってんの?
だったらたいしたもの。
今時モバイルですらマルチスレッドが当たり前だからベンチマークも複数スレッドで実行すべき。
スレッド使うライブラリーをリンクしないとシングルスレッド版のmallocとリンクする環境もあるし
318:名前は開発中のものです。
15/02/11 03:06:07.85 rJC6nJDr.net
>>306
ライブラリが貧弱な環境だと効果はあったんじゃない?
ライブラリが貧弱で有名だったPS3とか。
ゲームエンジン アーキテクチャって本PS専門デベロッパーだった人の著書みたいだし
319:名前は開発中のものです。
15/02/11 03:24:52.81 tga+SBCo.net
>>307
データ読み込みや通信で「now loading…」、ムービー再生とか以外でマルチスレッドって何に使うの?
いろんな判定でシングルでないと困らない?
俺はコンシューマ長すぎのせいか、マルチスレッド(タイムスライス型)は、そもそもゲームシステムとして実装が思い付かない
どうしてもタスク()で疑似マルチしか作れないや
320:名前は開発中のものです。
15/02/11 03:29:13.74 0cWu/C1d.net
>>307
ポインタのつなぎ替えの部分に一応クリティカルセクション使ってる。
が、これのベンチがねぇ・・・
複数スレッドで同時に確保しまくって人為的にコリジョン起こしても、
シングルの場合と違って純粋な値が取れないので。
321:名前は開発中のものです。
15/02/11 03:54:41.50 0cWu/C1d.net
スマポあった。同じく10000を10回。
new 0.00696283003770957 100
sha
322:red_ptr 0.039324851409757 564.782584046715 生ポインタとboostのshared_ptrね。 下が自作のリンク方式とカリカリにチューンした参照カウント方式のスマートポインタ。 link 0.0273835524999122 393.281932082318 count 0.0157994938635595 226.911956460117 これも、安全をとるなら生より多少遅くてもboostで十分と思う。 自作のスマポは労力の割にはねぇ。
323:名前は開発中のものです。
15/02/11 04:10:32.63 0cWu/C1d.net
書き忘れてた。>>305はゲームに近いように
10000まで{ 4, 10, 20, 100, 208, 501 }のサイズを巡回して確保していってる。
>>311は同じオブジェクトをずーっと生成してる。
こうするとnewがなぜか結構速いんだけど、その状態で対決してみたかったので。
324:名前は開発中のものです。
15/02/11 08:00:15.92 JqfHYvpf.net
んーなんか車輪の再発明がどんどん無駄になってくのな
必要な機能が既存のコードにあるなら、わざわざ作る必要は無い、みたいな
325:名前は開発中のものです。
15/02/11 08:08:59.24 JqfHYvpf.net
自分は今は自作コンパクションを使ってるけど、これも誰かの作ったコードを流用した方が早い時代が来るのかな?
326:名前は開発中のものです。
15/02/11 08:40:48.37 45+5SbHz.net
>>309
MTフレームワークの例
URLリンク(www.4gamer.net)
327:名前は開発中のものです。
15/02/11 13:02:10.23 tga+SBCo.net
>>315
これの詳細を知ってるが、レンダリングはPCだとGPU処理だから、マルチスレッドとは別で非同期でしょ?
それ以外は先程書いた通り
因みにこのフレームワークは自動変数(スタック)以外はメモリは静的に持ってるよ
328:名前は開発中のものです。
15/02/11 13:10:49.29 vZk9YDm5.net
ガチな将棋AIとか作ることになったらやっぱりCPUスレッド数のスレッド作って読みを分散するんじゃなかろうか
329:名前は開発中のものです。
15/02/11 13:40:34.62 sOoti607.net
どうせなら複数マシンに分散させるべき
330:名前は開発中のものです。
15/02/11 14:57:37.67 /JcbXeo3.net
そもそもメモリ管理なんて個人でやるものじゃないよ
せいぜいオブジェクトプールのように局所的なところで使ったほうがいい
自作アロケータを使ってみたい気持ちはわかるんだけどねぇ
331:名前は開発中のものです。
15/02/11 15:06:24.20 rJC6nJDr.net
>>309
シングルスレッドでパフォーマンス十分なら要らないんじゃない?
その場合アロケーター自作しようとする理由すら解らなくなるけど。
レンダリングスレッドを分けるってのは比較的簡単だからよく使われてる方法だね。
グラフィックスのAPIが全て非同期という訳でもないし、呼ぶ事自体比較的コストが高いものもあるドローコールとか
あとGPUが全てやってくれるわけでもない。
影とかモデルの持ってるマテリアルによってはマルチパスレンダリングが必要になるしね
それら含めて一つの独立したスレッドでレンダリングを行うって事
どこまでやるかはそれぞれのゲームエンジンの実装次第だけど
332:名前は開発中のものです。
15/02/11 20:31:12.70 IKslX+U4.net
PS3なんかはは汎用コアが貧弱でマルチスレッド使わないとまともに動かないらしいけど
PCはターボブーストなんかもあるし処理分割しなくてもそれなりに動くのかね
ゲームで重い処理って言ったらAIとか物理演算とか?
それらやらなきゃコア使い切る事もなさそう
333:名前は開発中のものです。
15/02/11 22:28:39.42 o3rdwdSA.net
自分の場合、(作ったのはC#とXNAだったけど)
・更新
非同期・4体のキャラの思考ルーチンをマルチスレッドで(他のキャラの状態は前フレームのものを利用)。
同期・同時に行う必要のある判定類。
非同期・4体のキャラのアニメーション演算(*)
↓
・描画(スキップされることがある)
非同期・キャラの描画コマンド発行(ただし、4体それぞれに(*)を同期)。(**)
同期
非同期・背景などの描画。
↓
・更新
※未了のタスクがあればいったん待機して、最初と同じ。
ということはやっていた。じつはXNAは(**)が異様に重くなるというハンデ持ちで、
(*)はC++だろうと当然重いはずだから、パフォーマンス上がると思うよ。
334:名前は開発中のものです。
15/02/11 22:33:55.73 o3rdwdSA.net
連投悪い。
というか、マルチコアのCPUなのにシングルで動作させてるって、同人ならともかく
商用ゲームだとハードを全然使いこなせていないんじゃないの。
仮にPS3相当かそれ以上のハードで、シングルで楽々動くゲームがあるとしたら、
それは「CPUスゲー!」じゃなくて「CPUを遊ばせている未熟なプログラム」
もしくは「絵的にボリューム不足」「敢えてシンプル路線のゲームにしただけ」だと思う。
335:名前は開発中のものです。
15/02/11 23:00:37.92 DLujIAOi.net
妖精左「マルチスレッド!!」
妖精右「マルチタスク!!」
俺「じっそうできればいいから・・・」
部長「ま だ か は や く し ろ 。」
336:名前は開発中のものです。
15/02/12 00:02:20.82 ebWGGwik.net
>>323
C#なんて全然ハード生かせないだろC++で作れよ
337:名前は開発中のものです。
15/02/12 00:29:15.74 DJBGtoR8.net
C++至上主義の時代はもう終わった
338:名前は開発中のものです。
15/02/12 00:32:29.34 UV0J6V6h.net
まだだ!まだ終わらんよ!
339:名前は開発中のものです。
15/02/12 02:23:42.32 U9NT4imE.net
さっき始まったばかりですよ
340:名前は開発中のものです。
15/02/12 02:30:04.64 rNOcVIpi.net
>>323
たしかにC#だと、ネイティヴDirectX呼び出す時点でカーネル切替が発生し、ボトルネックになる
(ただ一方、GCはちょっと工夫すればシーン切替時以外は抑制できる)。
まあC++が最強という事実は揺るがないし、だからここを覗きに来てるんだけど
今まで作った資産をそっくり移植するのは全部1人開発だと工数的に厳し過ぎるんよ。
自分はあくまでゲームを完成させるのが主眼なもんで。
341:名前は開発中のものです。
15/02/12 02:30:45.99 rNOcVIpi.net
>>325だった。
342:名前は開発中のものです。
15/02/12 09:37:50.92 ebWGGwik.net
>>329
> 仮にPS3相当かそれ以上のハードで、シングルで楽々動くゲームがあるとしたら、
> それは「CPUスゲー!」じゃなくて「CPUを遊ばせている未熟なプログラム」
> もしくは「絵的にボリューム不足」「敢えてシンプル路線のゲームにしただけ」だと思う。
こんなこと言う人間が
> 自分はあくまでゲームを完成させるのが主眼なもんで。
なんてよく言えるな
343:名前は開発中のものです。
15/02/12 09:58:41.94 DJBGtoR8.net
Unityの台頭とC++erの更なる没落
344:名前は開発中のものです。
15/02/12 10:00:56.62 K+V6X3Ce.net
社員さん、ステマ乙
345:名前は開発中のものです。
15/02/12 10:16:24.93 xZrWsSkn.net
世界は使いやすい道具の前にひれ伏す
これが分からない奴は一生地を這う
346:名前は開発中のものです。
15/02/12 10:44:14.01 K+V6X3Ce.net
Unityあつかいづらいから自分でライブラリ作ったわwww
347:名前は開発中のものです。
15/02/12 12:11:18.44 ZP/aF8VN.net
アホか。
みなが同じ道具を使ったら、それを売って儲ける奴の小作農になるだけ。
これが分からない人こそ
>一生地を這う
348:名前は開発中のものです。
15/02/12 12:13:54.04 ZP/aF8VN.net
>>331
>>323はあくまで>>321に対する客観的な指摘。
それと「自分はあくまでゲームを完成させるのが主眼なもんで」は別問題だよ。
349:名前は開発中のものです。
15/02/12 13:25:06.24 0nYHwL7l.net
実際PS3の初期タイトルは酷いの結構あったな
アイデアファクトリーとか
350:名前は開発中のものです。
15/02/12 15:23:29.14 gRG035Lb.net
作るものに応じて道具を選べない人が一生地を這うのでは
各処理をどんだけ細切れにしても結局全部処理しないと次には進めず、
しかも実は単一の処理は積み重ねても大して時間はかかっておらず、
単なるスレッドの立て損にしかなっていないんならマルチスレッドなんか不要
商業だからだのなんだのと適当な言い訳をしても、
実際は目に付くよさそうに見えるものに振り回されているキョロ充
まずは作りやすい方法で実装してテストして、ダメだったら作り直せばいいじゃん
351:名前は開発中のものです。
15/02/12 17:28:07.56 K+V6X3Ce.net
Unityの社員ってステマのノルマがあるみたい
352:名前は開発中のものです。
15/02/12 17:41:44.09 3BvTygsz.net
スレッドのが実装しやすい処理もあると思うの
353:名前は開発中のものです。
15/02/12 19:41:03.02 gRG035Lb.net
うにちゃんは次期主力ゲームエンジンの座を狙っているからね、仕方ないね
何が悲しくてわざわざ柔軟な使い方のできる言語投げ捨ててゲームエンジンなんぞに…
PHPやらJAVAやらに行った方がマシ
354:名前は開発中のものです。
15/02/12 20:21:56.36 K+V6X3Ce.net
そんなに自信があるのなら、自分たちでゲーム機を出せばいいのに
彼らの夢は、所詮は砂上の楼閣なんかね
355:名前は開発中のものです。
15/02/12 20:26:40.79 EbJGy+Ll.net
このスレってレベル低いよな
356:名前は開発中のものです。
15/02/12 20:29:07.88 EbJGy+Ll.net
>>339
出来ることは並列でやった方が早く終わるよね。
357:名前は開発中のものです。
15/02/12 20:35:29.18 wNE8sYSh.net
>>343
それは無理。彼らの夢は、ゲーム業界に巣喰う寄生虫になる事だから。
358:名前は開発中のものです。
15/02/12 20:42:55.10 K+V6X3Ce.net
>>345
その前にアルゴリズムを考えた方が早いかもね
359:名前は開発中のものです。
15/02/12 21:16:05.40 SEu5lClB.net
シングルスレッドで足りるならシングルスレッドで作ればいいと思う
後からマルチスレッドにしようとか考えたら地獄みるけど
ムダに作り込んで時間かけても仕方ないしね
360:名前は開発中のものです。
15/02/12 21:57:58.62 5lpYcWcf.net
スレッドの話で盛り上がってるけど、みんなpromiseとかatomicとかcasとかちゃんと理解できてる?
俺は半分も理解してない
361:名前は開発中のものです。
15/02/12 22:02:24.65 BY0ie4C4.net
C++を書いているとJavaやC#にだんだん似てくるし
C++で便利コードを書いても既存のライブラリには適わないし
C++でゲーム用ライブラリを書いていると既存のエンジンに似てきたから
既存のエンジン使うことにした。困ったらエンジン改造すればいい。
362:名前は開発中のものです。
15/02/12 23:13:41.81 X8c9QSvd.net
おーい、誰かクマが釣り針見つめてるAA持ってない?
>>349
promiseはFutureパターンのSTL実装かな。
casは不勉強だったわ。いちいちロックしなくても非同期でノード更新できるってことかな。
363:名前は開発中のものです。
15/02/12 23:54:36.97 yCMGD6Md.net
casって言われてもメモリのclしか思いつかないです
これの事でいいの
URLリンク(ja.m.wikipedia.org)コンペア・アンド・スワップ
364:名前は開発中のものです。
15/02/13 00:16:59.27 6pLn2rnq.net
visual c++2010です
コードを書いていると、未定義エラーなどのエラーが起こっている部分を波線で表示する機能がありますが
それをすばやく表示したい(エラーを確認する間隔を早めたい)時はどうすればいいのでしょうか?
オプションでそれらしき項目を探しているのですが、見つけられず困っています…
365:名前は開発中のものです。
15/02/13 00:28:10.25 FqU8O5pj.net
今表示されてる速度が最速だよ
文句があるならもっと早いCPUに代えろ
もしくはVSのバージョン上げたら改善される可能製はある
366:名前は開発中のものです。
15/02/13 00:38:48.23 PNw/R4Nn.net
何が原因かわからんが仮にnullpoって変数なり型名なりがあるとしてpoにだけ下線とエラー表示が出る謎現象なんかが困る
nullpoの間にスペース入れた後に消すなりコンパイルするなりして文字解析をやり直させると普通に通る
367:名前は開発中のものです。
15/02/13 00:38:56.82 6pLn2rnq.net
368:ありがとうございました
369:名前は開発中のものです。
15/02/13 02:11:39.11 E1xWFoJ9.net
コードを書いてるといきなり妙な場所に波線
面食らいつつ原因を探るべくコードを見直しているといつの間にか消える
他にも指摘されて修正した部分の波線がなかなか消えず、
あれ?修正間違ったかなと書き直そうとすると消えたりする
VSに不信感を抱きそう
370:名前は開発中のものです。
15/02/13 03:15:03.66 Jw6U7GOH.net
VS2010より2012, 2013はずっと賢いから変えたほうがいい
あとVSの謎の挙動はコードが悪いせいなのできちんと書くように心がけましょう
371:名前は開発中のものです。
15/02/13 03:17:28.00 Jw6U7GOH.net
いつもコードが悪いせいではないな
一括置換とかファイル名変更とか,変なことをやるとVSたんはたまにアホになる
372:名前は開発中のものです。
15/02/13 03:36:37.36 PNw/R4Nn.net
というわけでついっさっきVS2013導入したった
C++で打ってる時2010だとショートカットキー(Alt→派)でしかインテリセンス出なかったのが改善されてるのが今のところ一番嬉しい
373:名前は開発中のものです。
15/02/13 04:37:35.15 diYHW0ok.net
外部エディタを使っている自分に隙はなかった
374:名前は開発中のものです。
15/02/13 09:12:51.03 PRy9EczC.net
どんなスペックのPC使ってんの
375:名前は開発中のものです。
15/02/13 10:50:31.89 WvS4Hu4Q.net
JavaやC#ならわかる
だが負の遺産であるクソ構文抱えたC++で
実用的な速度であれだけのことが出来ることそのものが信じられん
動いたらラッキーくらいの謙虚な気持ちで使うべき
376:名前は開発中のものです。
15/02/13 11:23:05.70 /fWsfy1c.net
C++とC#ってそんなにちがうか??
C++って多少手間暇かかる部分はあるが、自前で組めばどうにでもなる事でね?
まあ、プログラムはソースの書き方だけで作る時間に10倍以上の差が出るし、
モジュールやオブジェクト指向を理解してるかどうかで100倍以上の差が出るから、
その辺りの違いだろうけどな。
377:名前は開発中のものです。
15/02/13 11:25:59.01 NjULDeHN.net
MSがBC++を買っとけば世界が平和になってたんですよ…
378:名前は開発中のものです。
15/02/13 12:17:28.61 oAXnXeHu.net
学習コストの高い言語はもう流行んないでしょ
ゲームもコア部分以外はスクリプトで書くのが主流になるだろうし
C++プログラマはゲームエンジン書けるレベルの人しか生き残れないな
379:名前は開発中のものです。
15/02/13 13:34:54.76 /fWsfy1c.net
パソコン自体がもうほとんど進化しなくなったのに、遅い言語を勧められてもな
380:名前は開発中のものです。
15/02/13 14:00:42.22 wCixqXPj.net
状況次第ではJavaScriptの方が速いなんて事もあるのに
まだそんな事を言っているのか
URLリンク(arewefastyet.com)
381:名前は開発中のものです。
15/02/13 14:07:45.39 /fWsfy1c.net
まずは、JavaとJavaScriptの違いから勉強しようね?
382:名前は開発中のものです。
15/02/13 14:07:50.74 ozS65/+Z.net
と言うかC/C++のスレでいい加減スレチw
383:名前は開発中のものです。
15/02/13 14:18:22.58 diYHW0ok.net
いや、C/C++の存在意義を知る上で重要な議論だよ。
384:名前は開発中のものです。
15/02/13 14:20:03.86 s8SeVfmU.net
しかも、asm-jsってClangで中間コードにしたものをJavascriptに変換するものであって人間が書いてネイティブコードより速くなるもんじゃねえよ
385:名前は開発中のものです。
15/02/13 14:58:19.33 wCixqXPj.net
他の言語は実行がVMだから遅い、C++はネイティブコードだから(常に)VMより速いと言う幻想を>>367は持っているようなので
ぶち壊してやった
386:名前は開発中のものです。
15/02/13 15:06:44.71 /fWsfy1c.net
で、JavaやC#がC++と等速になったとかいうデータはマダー??
387:名前は開発中のものです。
15/02/13 15:23:17.
388:57 ID:fRUihGLp.net
389:名前は開発中のものです。
15/02/13 15:25:16.23 diYHW0ok.net
いったい、何のためにそんなことを・・・
390:名前は開発中のものです。
15/02/13 15:25:55.96 9I9SRziA.net
C++の中にCをラップしているという、気味の悪いC++の現状を憂う気持ちは分かる
C++という言語自体がすでに溶岩流状態だよなwww
…
391:名前は開発中のものです。
15/02/13 15:26:18.69 s8SeVfmU.net
>>373
誰もVMだから遅いなんて言ってないと思うんだけど
で、遅いのは確実だろC#がネイティブコードになっても遅いのは変わらないよ
CやC++より実行時に行う事が多いのだから当たり前のこと
392:名前は開発中のものです。
15/02/13 15:27:18.22 7ayiwF3a.net
中間コードを実行するVMの関数呼び出しや演算がC++より速くなることは原理的にないんじゃないの
速くなったとしても結局記述されたコードのレベルの差でしょ
C++でチューニングしたコード書けばもっと速くなる
Cのコードがチューニングされたアセンブリより遅いのといっしょ
393:名前は開発中のものです。
15/02/13 15:31:25.28 4Xq/J0Q+.net
話の流れに乗ってみるが
ゲーム本体はc++でツール等はc#というのを
ちらほら聞くけど実行している人いる?
いるとしたらどれだけ有用か意見をお伺いしたい
394:名前は開発中のものです。
15/02/13 15:36:07.95 s8SeVfmU.net
>>379
いや、そうとも限らないよターゲットが固定されてるなら問題ないが、
ネイティブコードに変換したら実行するCPUを完全に生かすコードを吐けるとは限らない。
JITならターゲットがコンパイラを内蔵してるようなものだから動かす環境のCPUを完全に生かすコードを吐ける。
もちろん実行時だから時間のかかる複雑な最適化は出来ないから元のコード次第だけど
>>380
そういえばUnrealは昔エディタはVB製だったな。
395:名前は開発中のものです。
15/02/13 15:43:02.61 6pLn2rnq.net
>>362
356ですが、もし自分の事でしたらXeon W5590(8コア3.33GHz)・メモリは12gbです
遅延が起こるコードはDLLを作る用のもので、約5000行
(2000行のファイル2つ・1000行のファイル1つ、それぞれa.cpp b.h c.hとします)です
a.cpp(2000行)の途中でb.hとc.hをインクルードしてる状態ですが
a.cppの一番下の行の方でスクリプトを書きますと、
波線や#if 0-#endifの半透明化が行われるまでにおよそ2分ぐらいかかります
396:名前は開発中のものです。
15/02/13 15:46:18.40 diYHW0ok.net
原理的なパフォーマンスより生産性を優先されることで言語の歴史は移り変わってきたし、
機械語 ⇒ アセンブラ ⇒ C
までは割とはっきりと移り変わってきたと思う。
それ以降、C ⇒ C++ ⇒ Java or C#
についてはうろうろしてる感じ・・・。
やっぱり、今もC++は欠かせないでしょ。
397:名前は開発中のものです。
15/02/13 15:46:47.59 7ayiwF3a.net
>>381
あー確かにターゲットが広いとC++で全部に最適化するのは現実的じゃないな
398:名前は開発中のものです。
15/02/13 15:52:11.33 KYsA9vla.net
ツールはマルチプラットホームで動く必要が無いってのが大きいんじゃないの?
Windows, Mac, コンシューマ機 で動くとなると C++ しか選択肢が無かった気がする。
そこにモバイルが加わって、必ずしもC++が移植性の面で最良では無くなりつつあるのかもしれない。
399:名前は開発中のものです。
15/02/13 15:55:59.21 /fWsfy1c.net
問題点がGCを使うことの有無になってきてる気がするな
適切にGC.Collect()を使えばいいというような話はあるが……どちらが良いかはよーわからんw
400:名前は開発中のものです。
15/02/13 15:56:27.80 7ah0R
401:MwS.net
402:名前は開発中のものです。
15/02/13 15:59:29.02 diYHW0ok.net
>>387
まーそうだな。
いずれにしても、ちゃんとした設計ができるというのが前提。
その上でパフォーマンスと生産性(クロスプラットフォームかどうかなど)を勘案した上で適切な言語を選択する。
できれば全部C++でやりたい派だけどw
403:名前は開発中のものです。
15/02/13 16:09:25.94 /fWsfy1c.net
設計気にせずコーディングでゴリゴリやりたい派が居るからなぁ……
ライブラリが充実してると有効なんだが、充実してない場合は……お察し下さい
404:名前は開発中のものです。
15/02/13 17:05:12.10 wCixqXPj.net
C++のコンパイラは事前コンパイラだから
実行前にはプログラム全体のネイティブコードが得られるが
プログラム全体を無差別に最適化する分コンパイルに時間が掛かるし
実行時の状況を見て最適化する事も出来ない
JITコンパイルは実行時によく使われたコードだけを最適化するから割と高速に実行できる事が多い
URLリンク(ja.wikipedia.org)実行時コンパイラ
405:名前は開発中のものです。
15/02/13 17:11:55.89 diYHW0ok.net
その中間がGPUのシェーダーって感じかな。
動的ではないけど、同じコードをデバイス(ドライバ)に応じて実行直前に一度コンパイルする。
406:名前は開発中のものです。
15/02/13 17:26:17.39 wCixqXPj.net
JITだと最適化すべき所があまりに多いと最適化が間に合わないし、あまり複雑な最適化はできないだろうけど
プロファイラで遅いところを見つけてそこだけC++で書くことも出来る
そうすれば速度が下がるデメリットより生産性が上がるメリットの方が上回ると思う
Android 5.0は中間コードから事前コンパイル出来るらしいが
インストールに時間取りそうだな
MonoはJITコンパイルが禁止されているiOS向けには事前コンパイルするらしい
407:名前は開発中のものです。
15/02/13 17:30:13.12 s8SeVfmU.net
>>392
だからってJavaやC#が速いってことにはならんからな。
そこを勘違いすんなよ
408:名前は開発中のものです。
15/02/13 17:40:26.14 7ayiwF3a.net
ただでさえ動的な型付けやジェネリクス、クロージャなんかでスクリプトの最適化にかかるコストは高いし
かけられるコストに制限のかかるJITが静的なコンパイラ超えるのはまだまだ先の話だろうな
409:名前は開発中のものです。
15/02/13 17:49:39.74 3uAgugBd.net
C++入門系の本だと「STLは難しいので分からなくてOKです^^;」とか書いてあるけど
Javaとかの入門書だとジェネリクスやリフレクションも簡単に分かって当たり前が前提
程度の低い人がC++入門書の内容も理解できずに「C++はすごいんだ」と威張っている
410:名前は開発中のものです。
15/02/13 17:53:19.30 s8SeVfmU.net
>>395
何言ってるのか解らない
411:名前は開発中のものです。
15/02/13 17:57:54.44 9I9SRziA.net
どこの入門書だよ…
STLのような便利ツールを分からなくてOKなんて書くような入門書はクソ本認定必至だぞ
Unityに絡まれたりC#やJavaに絡まれたり大変だな
一体何が始まるんです?