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

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

VC++の最適化

1 :デフォルトの名無しさん:02/05/10 01:05
VC++の最適化について語りましょう


2 :デフォルトの名無しさん:02/05/10 01:06
スレ立てるほどのことなんだろうか?

3 :デフォルトの名無しさん:02/05/10 01:07
__forceinlineはとても役に立ちました。

4 :デフォルトの名無しさん:02/05/10 01:13
演算は最適化されてるとこんな感じで展開されるのかな・・・?

int i, j;
...
i = i + 1; >>>> i++;
i = i + 3; >>>> i += 3;
i = 1 + 2 + 3; >>>> i = 6;
i = j * 8; >>>> i = j << 3;
i = 7 + j / 4; i = 7 + j >> 2;


5 :デフォルトの名無しさん:02/05/10 01:19
>> i = 7 + j / 4; i = 7 + j >> 2;
i = 7 + j / 4; >>>> i = 7 + j >> 2;


6 :デフォルトの名無しさん:02/05/10 01:19
ちょっと待てよ

7 :デフォルトの名無しさん:02/05/10 01:22

割り算はビットシフトにはならなくない?
-1/4 != -1>>2
じゃないかなぁ?

8 :デフォルトの名無しさん:02/05/10 01:43
>>7
負の除算はそうかも

あと
typedef struct{
int i;
int *p;
} sXYZ, *pXYZ;

int i;
sXYZ sxyz;
pXYZ pxyz;
i = sizeof(sxyz); >>>> i = 8;
i = sizeof(sXYZ); >>>> i = 8;
i = sizeof(pxyz); >>>> i = 4;
i = sizeof(pXYZ); >>>> i = 4;
かな?


9 :デフォルトの名無しさん:02/05/10 01:44
>i = j * 8; >>>> i = j << 3;
違うと思う。

10 :デフォルトの名無しさん:02/05/10 01:52
j = 0xfffffffeであって

int j;なら
j = j / 2; >>>> j /= 2; のままで (j = -1
unsigned int j;なら
j = j / 2; >>>> j >>= 2; になるとか・・・(j = 21........


11 :デフォルトの名無しさん:02/05/10 01:57
WORDを使うかDWORDを使うかは悩みどころ。
その時々で違うと思うけど、掛け算のときはWORDのほうが早いよね。
DWORD hage = hoge()&0xFFFF;
としておくと、コンパイラがhageを16bitとして扱って最適化してくれるみたい。

12 :デフォルトの名無しさん:02/05/10 01:58
>>9
int だから?

でも何かの参考書では(MASMアセンブラの参考書だったかな?
<< は正負関係なく正常に動作する >> は負だとだめと書いてあったような


13 :デフォルトの名無しさん:02/05/10 02:06
>>11
ん・・・そうなの?

座標とかサイズの変数いつも4バイトにしてるから
イメージの拡大縮小とかで4バイト同士の乗除算になるかな・・・(^^;

int x;
int y;
DWORD width;
DWORD height;
POINT cursorpos;
SIZE imagesize;
RECT screenrect;
などなど・・・


14 :11:02/05/10 02:15
>>13
不確かな情報でふが・・・
αブレンドのときに、
右にシフトしてからadlpha値をかけて左シフトで元に戻すほうが、
その場でalpha値をかけて&0xFF00でマスクかけるよりもかなーり早かった。


15 :デフォルトの名無しさん:02/05/10 02:18
引数や戻り値はboolはダメでBOOLって本当?

16 :デフォルトの名無しさん:02/05/10 02:31
比較はBOOLのほうが速い。代入はboolのほうが速い。だっけ?

17 :デフォルトの名無しさん:02/05/10 03:11
WORDを演算で扱うと、パーシャルレジスタストールでない?
コンパイラがその辺も考慮してくれるの?

18 :デフォルトの名無しさん:02/05/11 00:50
boolは全く使わないなぁ
BOOLばっかし


あとは#defineとconst(グローバル)の違いとか・・・

const int ABC = 4;
#define DEF 4
main()
{
int i = ABC;
const int j = ABC;
const int k = DEF;
}
※この場合最適化されると
j は定数として扱われるのかな?


EffectiveC++(?)には定数は#define よりも
const使いなさいみたいなこと書いてあったけど


19 :デフォルトの名無しさん:02/05/11 00:52
>>j は定数として扱われるのかな?
j, k は定数として扱われるのかな?


20 :デフォルトの名無しさん:02/05/11 03:01
僕は貧乏だから、VC++の最適化オプションはグレーです・・・

21 :デフォルトの名無しさん:02/05/16 06:14
age

22 : ◆coMPIlL. :02/05/16 11:00
>>18
定数扱いになるよ。

#include "stdafx.h"
#include <iostream>
using std::cout; using std::endl;

#define DEFINE 5
const int CONSTANT = 6;

void dummyFunc( int i, int j)
{
cout << i << j << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
volatile int a = DEFINE;
volatile int b = CONSTANT;

volatile const int ca = DEFINE;
volatile const int cb = CONSTANT;

dummyFunc( a, b);
dummyFunc(ca, cb);

return 0;
}

で、

sub esp,0Ch

mov dword ptr [esp+4],5
mov dword ptr [esp],6

mov dword ptr [esp+8],5
mov dword ptr [esp+8],6

mov eax,dword ptr [esp]
mov ecx,dword ptr [esp+4]
push eax
push ecx
call dummyFunc
push 6
push 5
call dummyFunc
xor eax,eax

こうなる。

volatile つけたから一応実体はできたけど、
volatile なくすとそれすらなくなる。

23 :デフォルトの名無しさん:02/05/22 01:47
呼び出しにレジスタ使うオプションなかったけ

24 :デフォルトの名無しさん:02/05/22 02:15
>>23
__fastcall?

25 :デフォルトの名無しさん:02/05/22 02:22
VisualStudio.NETのコンパイラが6.0より馬鹿になっとる・・・。
昔作ったゲームをコンパイルし直したら54fps->51fpsにダウンした。
あらゆる最適化オプションを試したが、ファイルサイズがでかくなるだけで、
1fpsも速くならなかった。

M$なんとかしる!


26 :デフォルトの名無しさん:02/05/22 02:44
>>25
所詮メーカー品、どうしようもないね。
gccのソース、チューニングするのなんてどう?

27 :デフォルトの名無しさん:02/05/22 03:02
gccは遅い、これ定説

28 :デフォルトの名無しさん:02/05/23 02:24
VisualSudio.NETにVC++6のC++プロジェクトをインポートすると
勝手にC++例外処理が有効になる罠。

29 :デフォルトの名無しさん:02/05/23 11:15
iccは速い。

30 : ◆4COMPILE :02/05/23 13:47
>>28
そうなんや、例外必ず有効にするから知らなかった。

31 :デフォルトの名無しさん:02/05/23 20:13
例外が有効になっただけで効率が落ちるコード化居てる奴が悪い

32 :25:02/05/24 04:10
何回もコンパイルしていたら54fpsに戻ったよ・・・。
どうなっとんじゃゴラァ


33 :デフォルトの名無しさん:02/05/24 05:40
単に実行したときに裏で何か動いてたとかじゃないのか?

34 :デフォルトの名無しさん:02/05/24 21:06
例外が有効になったせいで効率落ちたら例外じゃなくてただのチェッカだ。

35 :デフォルトの名無しさん:02/05/24 23:20
例外は認めません。

36 :デフォルトの名無しさん:02/05/25 01:53
例外使わないC++なんてやってらんない。

37 :デフォルトの名無しさん:02/06/02 13:02
私はVC++6.0のStandardEditionなので最適化が使えません。
画像処理とかではなく、純粋に計算に時間がかかっている
プログラムの場合、最適化にる速度アップは見込めますか?
見込めるならProfessionalEdition(今は違うんだっけ)に
投資しようかと思ってます。
具体的にはトリップ検索ツールを作っている。

38 :デフォルトの名無しさん:02/06/02 23:54
Trip検索ツールなら、JohnTheRipperとか使えよ……

39 :37:02/06/04 00:45
>38
いや、あの、勉強がてら、、、
ところで最適化できるようなEditionって個人で買うにはずい
ぶん高いですね。
私の経済状態では無理そうなので37の質問は無視してくだ
さい。

40 :デフォルトの名無しさん:02/06/04 03:32
高速化したいなら、最適化とか気にする前にcrypt.cを使わずに書き直せ。

41 :デフォルトの名無しさん:02/06/04 03:38
iccのトライアル版でコンパイルすれば?

42 :デフォルトの名無しさん:02/06/04 03:47
つーかvectorC使え

43 :デフォルトの名無しさん:02/06/04 08:59
ここはVCの最適化を語るスレとして全く機能し取らんな。
質問者にも問題あるが回答者が無能すぎる。

44 :デフォルトの名無しさん:02/06/04 12:10
VC++で、構造体の隙間を埋める(パック)したいとき、
#pragma pack
以外に方法があったら教えてください。

45 :デフォルトの名無しさん:02/06/04 12:45
>>44
VC++のプロジェクトの設定でC/C++タブを開く。
カテゴリをコード生成にセットして、構造体メンバのアライメンとコンボボックス
で1バイトに設定する。

ちなみにVC++6.0の場合ね。

46 :デフォルトの名無しさん:02/06/04 13:14
>> 32
VCの最適化って、環境によって異ならなかったっけ?
メモリとかの容量で。
なんか、全く同じものを別々の環境でコンパイルして、
fcとったら違う結果になった記憶が。

47 :デフォルトの名無しさん:02/06/04 13:17
>>45
わかりました。
ありがとうございます。

48 :デフォルトの名無しさん:02/06/04 13:48
>>46
バイナリの生成日時と製品シリアルとGUIDが埋め込まれる。

49 :デフォルトの名無しさん:02/06/04 14:32
最適化以前に、アルゴリズムを見直しなさい。

50 :デフォルトの名無しさん:02/06/04 16:49
>>49
最適化=アルゴリズムだと思うが。

分岐をなくす、アラインの考慮、メモリアクセスの局所性を高める、
論理演算を駆使する、
全部アルゴリズムレベルで工夫しない限りできないよ。


51 :デフォルトの名無しさん:02/06/04 17:08
アルゴリズム=処理フローだから
小手先の最適化はアルゴリズムの最適化にはならない。

52 :デフォルトの名無しさん:02/06/04 17:14
小手先の最適化が必要と思う段階ではすでにアルゴリズムの最適化はしつくしてるのが現実。

53 :デフォルトの名無しさん:02/06/04 17:19
>>52
しかし、最適化ページでアセンブラ関連の記事をみた初心者は
アルゴリズムの前に小手先の最適化をしたがる。

54 :デフォルトの名無しさん:02/06/04 18:28
>>53
なんだかんだいっても、最適化、面白いからね。
苦労して少しずつ速くなるのは、やはり気持ちが良い。

もっとも、その最適化に意味があるのかは別問題だが。
払った労力に対して、ちょっとしか速くならないことも多いからね。

55 :37:02/06/08 01:14
>40
作ってみました。
結果、、、遅すぎてシャレにならん。
UFC-cryptの10倍は遅い。
UFC-crypt.dllの偉大さを知った。

56 :デフォルトの名無しさん:02/06/08 01:52
最近はメモリコピーの回避が一番効くなー

57 :デフォルトの名無しさん:02/06/08 01:54
メモリコピーよりも分岐予測ミスする方が痛い

58 :デフォルトの名無しさん:02/06/08 02:10
crypt最速選手権でもやるか。

59 :デフォルトの名無しさん:02/06/08 02:29
UFC-cryptの4倍ちょい速いコード書いてある

60 :デフォルトの名無しさん:02/06/08 03:08
プロファイル取ったらほとんどメモリコピーだったYO!

61 :デフォルトの名無しさん:02/06/08 20:46
>59
あぷキボンヌ

62 :デフォルトの名無しさん:02/06/10 01:31
>>59
UFCって何の略か知ってますか?

63 :デフォルトの名無しさん:02/06/14 10:21
うふっC

64 :デフォルトの名無しさん:02/07/07 18:10
保守age

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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)