WinXP,Vista Lazarus1.0.12 の環境でゲーム作成をしています。
シューティングをつくっているんですが、変数の型で解らないところがあります(計算速度の比較)。
①整数計算 Byte,ShortInt型とInteger型の計算速度の差
②実数計算 Single型,Double型,Currency型の計算速度の差
③RecordとPackedRecordの違い
①、②ともに、計算処理速度の速い方を使おうと思っています(メモリは気にしません)。リンクでもいいのでお願いします。
③はどのような違いがあるか教えてください。
演算速度に関しては実測してみればいいのではないかと。
・演算回数を最小にするようなコーディングにする。
(ループの中で変化しない計算式は変数を使ってループの外に出す等)
・使う変数の型の数を最小限に抑える (DWORD と Single しか使わないとか)。
・乗除算等のコストの掛かる計算はなるべく避ける。
・可能な限り整数演算しかしない。
なんだかんだ言っても、大昔のプログラミングの参考書に
書いてあったような事が一番効きます (実測すれば判ります)。
record と packed record についてですが、
procedure TForm1.Button1Click(Sender: TObject);
type
TRec1 =
record
a: array [0..9] of Boolean;
b: array [0..9] of Byte;
c: array [0..9] of Integer;
d: array [0..9] of Double;
end;
TRec2 =
packed record
a: array [0..9] of Boolean;
b: array [0..9] of Byte;
c: array [0..9] of Integer;
d: array [0..9] of Double;
end;
begin
ShowMessage(IntToStr(SizeOf(TRec1)));
ShowMessage(IntToStr(SizeOf(TRec2)));
end;
これがどういう結果になるのかを調べてみてください。
両者の違いはワード/バイトアライメントを行うか否かです。
http://docwiki.embarcadero.com/RADStudio/ja/%E6%A7%8B%E9%80%A0%E5%8C%96%E5%9E%8B
http://docwiki.embarcadero.com/RADStudio/ja/%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E3%82%A2%E3%83%A9%E3%82%A4%E3%83%B3%E3%83%A1%E3%83%B3%E3%83%88%EF%BC%88Delphi%EF%BC%89
> WinXP,Vista Lazarus1.0.12 の環境で...
・Delphi 使いの皆が皆 Lazarus / FPC を使っているとは限りません。
・Delphi 使いの皆が皆 Lazarus / FPC に精通しているとは限りません。
・Delphi と FPC の挙動は異なる事があるため、
Delphi で通用する事が FPC でも通用するとは限りません。
ここは Delphi Q&A なので、FPC での正確な挙動が知りたければ、
Lazarus / FPC のコミュニティでお聞きください。
回答ありがとうございます。
Lazarusのコミュニティが見つからなかったので、ここで質問させていただきました(Delphiトライアルとか入れてみた方がいいんですかね...)。
packed recordを使ってもさほどサイズも減らないようなので、recordのアンパックドレコードにしようと思います。
計算速度はやっぱり努力ですか...
> Lazarusのコミュニティが見つからなかったので
あるにはありますよ。
[Pascalにホエ口!Lazarus,FreePascal (free-ml)]
http://www.freeml.com/lazarus
# 紹介しといてアレですが、あまり活発ではありません。
タイトルに "エ口" が含まれるのでこの掲示板の
NG ワードに引っ掛かってしまうのも困りモノです (^^;A
# "ろ"ではなく漢字の "くち" で代用してあります。
> Delphiトライアルとか入れてみた方がいいんですかね...
いあいあ、そういう事ではなく、Delphi と FPC は別のコンパイラなのですから、
Lazarus を使うのであれば、Delphi の事を聞いても参考にならない事が多いと思うのです。
ライブラリにしたって Delphi の VCL と FPC の LCL は互換性がありませんしね。
> packed recordを使ってもさほどサイズも減らないようなので
ん?話の流れからして「速度重視」の事かと思っていました。
速度重視なら packed を使う事はまずないでしょう。
> 計算速度はやっぱり努力ですか...
"地道な作業" という意味では努力ですね。
Lazarusコミュニティあったんですか...。
とりあえず登録はしてみましたが・・・。活発じゃなさそうですね(笑)
Delphi導入は見送って、Lazarusで頑張っていこうと思います。
packed recordの件は速度重視のつもりで書いたんですが、計算は、サイズが小さければ早いものだと思っていたので。
ツイート | ![]() |