- 1 名前:デフォルトの名無しさん mailto:sage [2007/04/29(日) 09:54:14 ]
- コンパイラ性能、コンパイルオプション、コードの最適化などについて語りましょう。
主に速度面の最適化を中心としますが、サイズなどの最適化もどうぞ。 なお、OS、CPU、コンパイラなどは限定しません 前スレ C、C++の最適化について語るスレ pc11.2ch.net/test/read.cgi/tech/1084676298/
- 259 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 15:54:31 ]
- 何の話だ?
- 260 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 00:01:50 ]
- foreachの最適化は無理無理無理無理いいいいいいいいいいいいいいいいいい
- 261 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 11:22:17 ]
- PenrynだとRadix-16のおかげでdivのクロック数は最小で6
昔とはだいぶ違うよ
- 262 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 13:52:45 ]
- >>261
あれ、14じゃね?
- 263 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 12:42:52 ]
- if((a == 1) && (b == 1)){ asdf; } という処理は論理積 && を使っている以上、分岐が2つある
if(a == 1){ if(b == 1){ asdf } } に等しくて、これだと条件分岐が多くその分投機予想も外れる可能性があがるので if((a == 1) & (b == 1)){ asdf; } にすべきだ、っていう話を聞いたんですが、これは本当なんでしょうか? もしくは、そんな事は演算子がオーバーロードされていない限り明確に分かりきった事なので あらかじめコンパイラが論理積を (a == 1) & (a == 1) と同等の処理に最適化してくれたりとかはないんでしょうか?
- 264 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 12:57:59 ]
- >>263
実験してみた。最適化できるみたい。 $ cat test.c void g(void); void f(int a, int b) { if ((a == 1) && (b == 1)) { g(); } } $ gcc --version gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ gcc -S -o - -Os test.c .file "test.c" .text .globl _f .def _f; .scl 2; .type 32; .endef _f: pushl %ebp movl %esp, %ebp cmpl $1, 8(%ebp) sete %al xorl %edx, %edx cmpl $1, 12(%ebp) sete %dl testl %eax, %edx je L1 popl %ebp jmp _g L1: popl %ebp ret .def _g; .scl 3; .type 32; .endef
- 265 名前:264 mailto:sage [2008/01/29(火) 13:01:03 ]
- >>263
使っているコンパイラでは結果が違うかもしれない。そういう環境で、且つ、実際に そのレベルの高速化が必要ならビット AND への置き換えもありうる。ただしその場合は しっかりコメントで実験結果に基づくコードだと添えておく必要があるだろうね。
- 266 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:11:04 ]
- なるほど、ありがとうございます。
- 267 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 20:35:23 ]
- 実装が長くても1度しか呼ばれない関数って、普通最適化でインライン展開されますよね?
- 268 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 20:41:11 ]
- 試してみれば?
- 269 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 20:46:26 ]
- インライン展開されます
- 270 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 20:46:55 ]
- コンパイラによってはインライン関数がちゃんと展開できたか教えてくれるコンパイルオプションがあるよ
gccの話だけど
- 271 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 20:47:27 ]
- ごめんなさい忘れてください
- 272 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 13:23:04 ]
- 同じ内容の関数を複数用意して使い分ける意味ってあるんでしょうか?
- 273 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 14:21:21 ]
- >>272
唐突に質問されても何を聞きたいのか判りませんが。 同じ内容でも型が違う場合はC++ではテンプレート関数で一つで済ませることもできますが、 Cではできません。その辺りの話でしょうか?
- 274 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 14:30:48 ]
- >>273
そうではなく、 void foo1(int hoge){}; void foo2(int hoge){}; void foo3(int hoge){}; 中の処理も全く同一な関数です オーバーロードだとかそういうのでも全くないです
- 275 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 14:35:21 ]
- >>274
別に意味なんてないと思うが。訳が分からん。 typedef void (*func_t)(int); とやっておいて、どこかでfunc_tの変数を宣言してそれらを代入し、 fptr1 = foo1; fptr2 = foo2; if(fptr1 == fptr 2){ ... }else{ .. } として、処理は同じだけど違うものとして動作させたいと言うくらいしか思いつかないな。 意味があるかないか、どちらにしろそのソースコードを書いた人に直接訊いてみれば良い。
- 276 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 14:38:01 ]
- ただのアホな作りなのか、後の仕変に対応するための措置なのか見極める必要はある。
現状で言えばまとめてしまって構わないとは思うが。
- 277 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 14:49:44 ]
- I キャッシュの関係で、そういうのを最適化のために使えるケースというのはあった。リンカスクリプトも直す必要があるが。
多分違うケースなんだろうけど。
- 278 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:56:47 ]
- >>272
目的があれば意味があるんじゃないの?
- 279 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:57:35 ]
- string::size と string::length は全く同じメソッドだな。
文字列としては length という言葉を使う方がしっくりくるが、 コンテナとしての要件を満たすには size がないと困る。 なら両方作っちゃえって感じなんだろう。 こういう例ならありうると思う。
- 280 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:08:27 ]
- ファイルやフォルダをコピーしたり消したり作ったり、.NETで言うFileInfoクラスやDirectoryInfoクラスを
自分で実装するのは.NETに頼らなくて済む、以外のメリットないのかなぁ・・ このまま行くと.net病になりそうだ・・・ どうすりゃ効率いいかなぁ・・
- 281 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:18:24 ]
- 既存のクラス使う方が仕事の効率は良さそうだな。
- 282 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:18:25 ]
- 微妙に誤爆・・だけど平気かぎりぎり・・・いやごめんなさい
- 283 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:20:15 ]
- うひょー、れすがついちゃってた
>>281 Windows専用なら.NET全然良いかな、と思う でも趣味でやってる分には微妙に素直に割り切れないというかなんというか
- 284 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:24:31 ]
- というかそのFileInfoクラスだけならともかくさ、他にも色々必要だろ
言い過ぎの誇張表現になるけどそのすべてにおいてMS開発陣の書いたコード以上のものを書けるのかってことになる つまり.NETを1箇所以上で使うなら出来得る限り.NETで実装を
- 285 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:25:36 ]
- 効率ってのが速度を表すなら、全ての.NETコードは効率が悪いことになる。
- 286 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:26:18 ]
- 個人でやる分には安心感はあるけどねえ
- 287 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:26:47 ]
- >>279
lengthはsizeを呼ぶだけとかってなら、アリだね。 極力重複コードは避けるべき。
- 288 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:28:45 ]
- うあー、こんなんにレスつけてくれてありがとうございます
>>284 コードの数割は.NETのを利用したもので、主要な処理の部分だけちょっとがんばって 頼らず書こうかなと思ってたんだけどそのままにしときます
- 289 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:15:21 ]
- まあ.NETのあるクラスのすべてのメソッドをフル活用する状況ならいんじゃないかねえ
- 290 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 02:50:44 ]
- >>287
重複コードは inline 関数のおかげで簡単に避けられるね。 Ruby とか同じ動作の別名関数が用意されてる事が多い。 A という言語では a という名前で、 B という言語では b という名前な関数を Ruby に作る時には、 a と b の両方の名前を採用しちゃえ、みたいな。
- 291 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 03:04:15 ]
- そういえばC++には識別子のalias機能がないんだね。
- 292 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 03:12:28 ]
- で、でふ
- 293 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 03:13:17 ]
- 変数は参照で、
関数はインライン関数で、 型は typedef で、 名前空間は namespace a = b; で、 クラステンプレートは継承でそれぞれ可能ではある。 ただ、インライン関数使うのと、 クラステンプレートを継承するのとは、 結構面倒臭い。
- 294 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 03:16:11 ]
- このスレ地味に常駐多くないかい
- 295 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 12:27:22 ]
- C++0xであるかも知れないが、テンプレートのエイリアスは作れないよな。
typedef std::vector my_vector; みたいなの。>>293にも書いてある継承は可能ってレベルではない。 コンストラクタやらオペレータやら全部知っていて、尚かつ書かないといけない。
- 296 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 12:33:01 ]
- オペレータは必要ないと思う。
コンストラクタは作らないとダメだけど。
- 297 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 13:55:01 ]
- >>296これで例として成立してるか自身無いけど。
継承しちゃうとoperatorの返す型と継承した型が異なっちゃうからうまくいかない。 struct c { int v; c operator+(int n) { c t; t.v = v + n; return t; } }; struct d:public c {}; main() { d e, f; f + 1; // OK e = f; // OK e = f + 1; // Error }
- 298 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 14:01:54 ]
- >>297
ああ、なるほど。 というか、色んな状況を考えると継承では不完全なのか。
- 299 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 16:10:51 ]
- if(hoge.piyo == hogehoge.piyo)
hoge.piyo = hoge.piyo & ~sym.att; こんなのはこれ以上どうにもなりませんよね?
- 300 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 18:04:15 ]
- 分岐は無くせるけどね。
hoge.piyo = ~(sym.att & -(hoge.piyo==hogehoge.piyo) & hoge.piyo; x86でPentiumPro以降に限定するなら hoge.piyo = ~(hoge.piyo == hogehoge.piyo ? sym.att : 0) & hoge.piyo; はCMOVになる可能性がある。 SSEで書けば次のようにも出来る。 // hoge.piyo = ~(sym.att & -(hoge.piyo==hogehoge.piyo) & hoge.piyo; hige.piyo = _mm_andnot_ps(_mm_and_ps(sym.att, _mm_cmpeq_ps(hoge.piyo, hogehoge.piyo)), hoge.piyo); ただSIMD以外は保守性が悪くなるだけであんま効果無いと思う。 実測した方がいい。
- 301 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 20:29:28 ]
- >>300
なるほど・・-ってのを初めてみたんで調べてきます、ありがとうございます
- 302 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 23:44:47 ]
- ANSI Cの仕様ではA==Bが真なら1になるから-1(全ビットON)にしてマスク作ってるだけだよ。
x86なら分岐せずにSETcc + NEGにコンパイルされるはず。
- 303 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:57:10 ]
- 偉そうな割には右括弧が足りないぞ。
- 304 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 01:00:29 ]
- どの道やってること同じではないのか
- 305 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:36:34 ]
- まぁ、>299程度ならコンパイラに任せて実測してみてからだな。
CMOVになったところで大した差は出ないだろ。
- 306 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:37:59 ]
- Windows環境でのファイルなんかのコピーを大きくする手段ってないですよね・・
どのみちOSの機能頼りなわけだから
- 307 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:39:36 ]
- コピーしたつもりがおっきくなっちゃうのかー。そりゃねーな。
- 308 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:41:01 ]
- すんません、ガチで寝ぼけてる
早くする、ですほんとごめんなさいごめんなさいごえmんあい
- 309 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:43:14 ]
- 早くする手段ならいくらでもあるだろ。
速いかどうかは知らんが。
- 310 名前:デフォルトの名無しさん [2008/02/04(月) 13:48:24 ]
- ストライピング
コードレベルの最適化とは無縁だが。
- 311 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:54:21 ]
- 高速化っていうんだから速くか
ストライピング、調べてきました それだと送り先が2箇所なのかな・・・ コピー元も先も1箇所なんです というかコードレベルって話じゃないですよね、把握しました
- 312 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:55:51 ]
- 単純にバッファをいじるとか
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet /Control/Session Manager/Memory Management ここの数値を というか普通こんなことしねえよな・・
- 313 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:58:42 ]
- >>311
実際問題、ファイルアクセスの速度はデバイス側の事情で決まってしまう。 と言うことで、単純に速くする方法はない。 寧ろ、本当にファイルコピーの時間が問題なのか、例えばレスポンスが問題なのか、検討した方がいい。
- 314 名前:312 mailto:sage [2008/02/04(月) 13:59:50 ]
- うちの環境だと10Mにしてるけどよく考えたら馬鹿すぎる方法だ
確か再起動必要だった気がするし
- 315 名前:311 mailto:sage [2008/02/04(月) 14:12:46 ]
- >>313
最近、.NETFrameworkというものを触ってみまして 色々試してみようとコンソールなんですがファイルをコピー(バックアップ?)する ものを作ってみたんですが、そこでコピー自体速くならないかなあと思った次第です >>312>>314 再起動必要じゃあれですね・・・ Win32APIとかってのもWindowsの機能を使うやつだって聞いたんで それでファイルのコピーするとこを実装すれば速いんだろうか
- 316 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 14:20:28 ]
- >>315
先ず、.Netって時点でスレ違い。 次に、ファイルコピー自体の速度はデバイス依存だ。 .Netでファイルコピーしていて遅いと思うのなら、コードレベルの最適化ではなく.Netの使い方の問題だ。
- 317 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 14:23:52 ]
- C/C++でファイルコピーなんてファイル開いて読み取って書き込むの繰り返しなんだからさ
たぶん.NETでもAPIでも使った方が良い ということでもうそれで完成でいいじゃない
- 318 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 22:14:23 ]
- >>311
Windows 限定なら FastCopy.exe のソースとか見ればいいんじゃないか。
- 319 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 22:28:22 ]
- オープンソースとか見ると趣味人でもない限りC/C++やWinAPIを使うのってことがどういうことかわかっちゃうよな
- 320 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 23:24:12 ]
- 俺は、お前の言ってることがどういうことかわからん。
- 321 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 23:30:10 ]
- 開発効率と現状溢れかえってるPCのスペックの話だろうか
まあ例外は確かに往々にあるけど例外は圧倒的にマイノリティ うちも業務じゃC/C++なんて使わないわ
- 322 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:05:18 ]
- 何言ってんだこいつ。
Webでもやってろ。
- 323 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:09:41 ]
- webは全然分類違うだろ、どこのアマグラマだよ
- 324 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:10:33 ]
- 業務でC++主流だと思ってるのか・・
- 325 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:14:07 ]
- マジョリティマイノリティでわけちゃうとなぁ
まあ業務になると大抵どっちかだけ向いてればいいんだが
- 326 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:46:26 ]
- スレチ自重
- 327 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 20:32:36 ]
- ここに適当なコード張ってみんなで最適化とか考えたけど適当な長さのコードが見当たらなくて10分で諦めた
- 328 名前:デフォルトの名無しさん [2008/02/07(木) 16:30:40 ]
- AMD向けの最適化に関するマニュアルはAMDのホームページにありますが、インテル用のはどこかでダウンロードできなうのでしょうか?
- 329 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:42:36 ]
- >>328
www.intel.co.jp/jp/download/index.htm
- 330 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 12:32:52 ]
- >>328
ttp://www.agner.org/optimize/
- 331 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 03:01:18 ]
- おいお前ら、俺のこいつをみてどう思う?
class Vector3 { public: union { struct {float x, y, z;} float data[3]; }; Vector3() {} Vector3(float ix, float iy, float iz) { x = ix; y = iy; z = iz; } }; inline Vector3 operator+(const Vector3 & va, const Vector3 & vb) { return Vector3(va.x + vb.x, va.y + vb.y, va.z + vb.z); } ベクトル化されるかな
- 332 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 03:16:06 ]
- 人に読んでもらうんならもうちょっとマシなコードを書いて欲しい所
- 333 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 03:17:37 ]
- 横レスだが、別に普通じゃねえかw
- 334 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 03:50:50 ]
- 全角スペースでいいからインデントをだな
- 335 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 03:51:35 ]
- コードがマシかどうかとは関係ないじゃん
- 336 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 03:52:06 ]
- >>332
「もうちょっとマシなコード」をkwsk
- 337 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 03:52:14 ]
- >>334だけど>>332じゃないです
- 338 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 03:52:45 ]
- ここで一つ自演を見付けると
- 339 名前:331 mailto:sage [2008/02/11(月) 04:00:14 ]
- 分かった、インデントが無いのは謝る
コンパイラ通してないのも謝る ただ俺は…ベクトル化について語って欲しかっただけなんだ…
- 340 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 04:03:30 ]
- コンパイルしてみりゃいいじゃん。
- 341 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 04:30:20 ]
- >>336
・classじゃなくて別にstructでいいんじゃ? ・無名共同体内無名構造体の後のセミコロンがない ・デフォルトコンストラクタ邪魔 ・メンバ初期化子を使って欲しい そして出来れば引数もconst type&で受け取った方が ・演算子オーバーロードを行う関数の引数名はrhs, lhsにするのが普通
- 342 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 05:04:44 ]
- >>341
・classじゃなくて別にstructでいいんじゃ? 俺は変数だけならstruct、関数あるならclass使ってるが ・無名共同体内無名構造体の後のセミコロンがない struct {float x, y, z;} ←これか。スマン ・デフォルトコンストラクタ邪魔 コンパイラによっては0で初期化される・・・っていう記憶があるから、 不定値のままでいいから一応書いた メンバ初期化子を使って欲しい そして出来れば引数もconst type&で受け取った方が うぉ?!全くその通りだw Vector3(const float & ix, const float & iy, const float & iz) : x(ix), y(iy), z(iz) {} これでおk? ・演算子オーバーロードを行う関数の引数名はrhs, lhsにするのが普通 知らんかった レスありがとう
- 343 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 05:22:15 ]
- 忘れるところだった。俺はベクt(ryについて聞いてたんだ
return Vector3(va.x + vb.x, va.y + vb.y, va.z + vb.z); こいつはベクトル化されるのか? それとも、 Vector3 v; for (int i = 0; i < 3; i++) {v.data[i] = lhs.data[i] + rhs.data[i];} return v; とか書かないとダメかな まぁコンパイラ依存な訳だが、どこまで美味く最適化してくれるか知りたいんだ
- 344 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 05:27:03 ]
- そこだけ見てもベクタ化されるかどうかは不明。
ってことで、クラスの作りだけ見ると、unionにする理由が判らん。 配列のようにも構造体のようにも使いたいのならそういうアクセッサを用意すればいいだけだから、 そもそもデータメンバを公開する理由が判らん。 あーそれから、floatを引き数とするコンストラクタなら参照にしなくて充分。
- 345 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 05:29:19 ]
- >>343
だから、コンパイラが何か、どんな使い方をするかなども書かれていないのにベクタ化されるかは不明だってば。 わざわざforループにしなくても、ベクタ化できるコンパイラならベクタ化すべきときにはしてくれるだろうよ。
- 346 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 05:48:14 ]
- これは3次元ベクトルのクラス。できる限りの高速化が望まれる
xyz公開してるのはGetX()とか作ったり使ったりするのが面倒くさいからだ コンパイラはVisual Stdio 2005のやつ
- 347 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 06:15:07 ]
- 「できる限りの高速化」を望みつつ、条件も出さずに実測もしないで、
挙句の果てに「面倒くさい」って、阿呆ですか?
- 348 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 07:07:04 ]
- >>347
俺が求めてるのは実測とかじゃなくて、最適化についての経験談なんだが こうした方がベクトル化され易い、とか… あと、 void Vector3::GetX() const {return x;} void Vector3::GetY() const {return y;} void Vector3::GetZ() const {return z;} とか実装しろと? 最適化、いや高速化に関係するのか?
- 349 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 07:42:43 ]
- >>348
だから、いろんなサンプル作って実測してみろって。 クラスを作るのなら効率よく組めて且つ速いものも狙うのは当然だろうし、 そうでないなら速度重視でがりがり書くことになるからクラスなんて作る意味がないって。 要は、やることが半端なの。
- 350 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:17:11 ]
- float を参照渡しする意味はあるのか?
- 351 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:21:53 ]
- >>349
自己矛盾乙
- 352 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:28:39 ]
- むしろだめだろう、リテラルわたせないじゃないか
- 353 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:36:13 ]
- 一時オブジェクトが生成されるから問題ない。
- 354 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:37:31 ]
- インライン化されるだろうから多分変わりはないだろうが、
積極的に参照にする理由は無いな。
- 355 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:39:02 ]
- そうでしたかごめんなさい
- 356 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 10:43:56 ]
- >>351
どこが自己矛盾?
- 357 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 11:55:47 ]
- 他人に訊く暇があったらまずやってみろ!
それで自分の力だけではどうにもならない事が起きた時初めて他人を頼る でないといつまでたっても他人に頼る癖が抜けないぞ
- 358 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 11:56:22 ]
- インライン化される事を前提としているならconst参照渡しは問題ないというかコンパイラの助けにある程度なるだろうけど、
確かに中途半端に長い関数で1ワードごときの変数を参照にする必要は無い。
- 359 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 02:45:14 ]
- >>357
ここは相談の場でなくて語り合う場だが?
|

|