VC++の最適化
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNGint 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;
0005デフォルトの名無しさん
NGNGi = 7 + j / 4; >>>> i = 7 + j >> 2;
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG割り算はビットシフトにはならなくない?
-1/4 != -1>>2
じゃないかなぁ?
0008デフォルトの名無しさん
NGNG負の除算はそうかも
あと
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;
かな?
0009デフォルトの名無しさん
NGNG違うと思う。
0010デフォルトの名無しさん
NGNGint j;なら
j = j / 2; >>>> j /= 2; のままで (j = -1
unsigned int j;なら
j = j / 2; >>>> j >>= 2; になるとか・・・(j = 21........
0011デフォルトの名無しさん
NGNGその時々で違うと思うけど、掛け算のときはWORDのほうが早いよね。
DWORD hage = hoge()&0xFFFF;
としておくと、コンパイラがhageを16bitとして扱って最適化してくれるみたい。
0012デフォルトの名無しさん
NGNGint だから?
でも何かの参考書では(MASMアセンブラの参考書だったかな?
<< は正負関係なく正常に動作する >> は負だとだめと書いてあったような
0013デフォルトの名無しさん
NGNGん・・・そうなの?
座標とかサイズの変数いつも4バイトにしてるから
イメージの拡大縮小とかで4バイト同士の乗除算になるかな・・・(^^;
int x;
int y;
DWORD width;
DWORD height;
POINT cursorpos;
SIZE imagesize;
RECT screenrect;
などなど・・・
001411
NGNG不確かな情報でふが・・・
αブレンドのときに、
右にシフトしてからadlpha値をかけて左シフトで元に戻すほうが、
その場でalpha値をかけて&0xFF00でマスクかけるよりもかなーり早かった。
0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNGコンパイラがその辺も考慮してくれるの?
0018デフォルトの名無しさん
NGNGBOOLばっかし
あとは#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使いなさいみたいなこと書いてあったけど
0019デフォルトの名無しさん
NGNGj, k は定数として扱われるのかな?
0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNG定数扱いになるよ。
#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 なくすとそれすらなくなる。
0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNG__fastcall?
0025デフォルトの名無しさん
NGNG昔作ったゲームをコンパイルし直したら54fps->51fpsにダウンした。
あらゆる最適化オプションを試したが、ファイルサイズがでかくなるだけで、
1fpsも速くならなかった。
M$なんとかしる!
0026デフォルトの名無しさん
NGNG所詮メーカー品、どうしようもないね。
gccのソース、チューニングするのなんてどう?
0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNG勝手にC++例外処理が有効になる罠。
0029デフォルトの名無しさん
NGNGそうなんや、例外必ず有効にするから知らなかった。
0031デフォルトの名無しさん
NGNG003225
NGNGどうなっとんじゃゴラァ
0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNG0037デフォルトの名無しさん
NGNG画像処理とかではなく、純粋に計算に時間がかかっている
プログラムの場合、最適化にる速度アップは見込めますか?
見込めるならProfessionalEdition(今は違うんだっけ)に
投資しようかと思ってます。
具体的にはトリップ検索ツールを作っている。
0038デフォルトの名無しさん
NGNG003937
NGNGいや、あの、勉強がてら、、、
ところで最適化できるようなEditionって個人で買うにはずい
ぶん高いですね。
私の経済状態では無理そうなので37の質問は無視してくだ
さい。
0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNG質問者にも問題あるが回答者が無能すぎる。
0044デフォルトの名無しさん
NGNG#pragma pack
以外に方法があったら教えてください。
0045デフォルトの名無しさん
NGNGVC++のプロジェクトの設定でC/C++タブを開く。
カテゴリをコード生成にセットして、構造体メンバのアライメンとコンボボックス
で1バイトに設定する。
ちなみにVC++6.0の場合ね。
0046デフォルトの名無しさん
NGNGVCの最適化って、環境によって異ならなかったっけ?
メモリとかの容量で。
なんか、全く同じものを別々の環境でコンパイルして、
fcとったら違う結果になった記憶が。
0047デフォルトの名無しさん
NGNGわかりました。
ありがとうございます。
0048デフォルトの名無しさん
NGNGバイナリの生成日時と製品シリアルとGUIDが埋め込まれる。
0049デフォルトの名無しさん
NGNG0050デフォルトの名無しさん
NGNG最適化=アルゴリズムだと思うが。
分岐をなくす、アラインの考慮、メモリアクセスの局所性を高める、
論理演算を駆使する、
全部アルゴリズムレベルで工夫しない限りできないよ。
0051デフォルトの名無しさん
NGNG小手先の最適化はアルゴリズムの最適化にはならない。
0052デフォルトの名無しさん
NGNG0053デフォルトの名無しさん
NGNGしかし、最適化ページでアセンブラ関連の記事をみた初心者は
アルゴリズムの前に小手先の最適化をしたがる。
0054デフォルトの名無しさん
NGNGなんだかんだいっても、最適化、面白いからね。
苦労して少しずつ速くなるのは、やはり気持ちが良い。
もっとも、その最適化に意味があるのかは別問題だが。
払った労力に対して、ちょっとしか速くならないことも多いからね。
005537
NGNG作ってみました。
結果、、、遅すぎてシャレにならん。
UFC-cryptの10倍は遅い。
UFC-crypt.dllの偉大さを知った。
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNGあぷキボンヌ
0062デフォルトの名無しさん
NGNGUFCって何の略か知ってますか?
0063デフォルトの名無しさん
NGNG0064デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています