Watch, Follow, &
Connect with Us

For forums, blogs and more please visit our
Developer Tools Community.


Welcome, Guest
Guest Settings
Help

Thread: DelphiとC++ Builderの処理性能差について


This question is not answered. Helpful answers available: 2. Correct answers available: 1.


Permlink Replies: 6 - Last Post: Nov 18, 2015 4:06 AM Last Post By: akio matsunaga
akio matsunaga

Posts: 4
Registered: 10/18/01
DelphiとC++ Builderの処理性能差について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Nov 17, 2015 12:00 AM
はじめまして投稿させて頂きます。
松永と申します。


Delphi 7で作成したアプリケーションをDelphi XE8にアップデートするとともにPascalからC++への
マイグレーション作業を実施しております。
しかしながら、マイグレーション実施後にC++アプリケーションの性能測定を実施したところ、実施前のDelphiアプリケーションと
くらべ約3倍の性能劣化が発生し、運用に耐えうる性能が出せておりません。
現在、各処理のポイントポイントで測定を行っておりますが、未だに処理遅延の決定的な原因の特定に至っていない状況です。

以下に質問事項を記載させて頂いておりますので、ご回答頂けるものについてだけでも結構ですのでご返信を頂けないでしょうか。

以上よろしくお願いいたします。


=========================================================================================================
■質問事項
1.DelphiとC++ Builderの性能差について
 Delphi環境からC++ Builder環境へのマイグレーション手順として、PascalコードをC++コードに手動変換(※)
 したものを、RAD Studio XE8(C++ Builder)上でビルドし、C++アプリケーションを作成しております。

 ソースコードの変換のみで機能の変更、追加等は実施しておりませんが、マイグレーション前とくらべ3倍の
 性能劣化が発生する原因として、何が考えられるでしょうか。
 ※ ヘッダファイルはRAD Studio XE8(Delphi)のC++出力オプションで出力
   ソースファイルはdelphiソースを手動でC++に変換
   VCLやDelphi RTLはそのまま使用

 <確認事項>
  1.DelphiとくらべC++ Builderのほうが処理速度が遅くなるのは仕方ないのか。
  2.その場合、C++ Builderの処理が遅いのは、どういったメカニズムによるものなのか。
  3.VCLやDelphi RTLを使用しているが、C++に変換する際の留意点等はあるのか。

2.VCLやDelphi RTLに依存しないC++コードの処理性能について
 VCLやDelphi RTLに依存しないC++コードで処理性能にどれだけの違いがあるのか検証する為、
 ループ、配列アクセス、演算処理、関数呼び出しを組み込んだテストプログラム(※)を作成し、
 性能比較を実施しました。

 ループ処理だけを実装したテストプログラムでは、ほぼ同等の結果となりましたが、テストプログラムの中に
 配列アクセス、演算処理、関数呼び出しを組み込むとPascalコードに比べC++コードでは約2倍の処理時間が
 かかる結果となりました。

 VCLやDelphi RTLに依存しないコードであっても処理性能が劣化する原因として、何が考えられるでしょうか。

 <確認事項>
  1.処理性能の劣化がコンパイラの性能によるものだとした場合、最適化する手段はあるのか。
  2.C++ Builderの配列アクセスや演算処理が遅い原因は何なのか。
  3.配列アクセスや演算処理を行う際、C++コードの記述(演算の記述方法等)に留意点等はあるのか。
  4.PascalコードとC++コードとで、関数呼び出しの処理速度に差があるのか。
  5.C++ Builderのほうが遅くなる処理は他にどういったものがあるのか。

3.対策について
 処理速度の改善策があればご教示ください。
 ※ 性能が劣化しているビジネスロジックをVC++で再構築し、dll化することで性能改善を図るなど、
   現在の開発環境にとらわれず、改善の可能性がある手段をご提示頂けると幸いです。

=========================================================================================================
[質問2で作成した測定プログラム]C++


---------------- 測定メインファイル ------------------------------
	do {
 
		/** 性能測定 start **/ ★ここから「性能測定 end」までの処理を約2万回ループさせその時間を測定
		int T;
		unsigned long x;
		unsigned long y;
		unsigned long z;
 
 
			x = Mem[A1] + (Mem[A1 + 1] << 8) + (Mem[A2] << 16) + (Mem[A2 + 1] << 24);
			y = Mem[B1] + (Mem[B1 + 1] << 8) + (Mem[B2] << 16) + (Mem[B2 + 1] << 24);
 
			z = x % y;
			x = x /* div */ / y;
 
			Mem[A1] = x & 0xFF;
			Mem[A1 + 1] = (x >> 8) & 0xFF;
			Mem[A2] = (x >> 16) & 0xFF;
			Mem[A2 + 1] = x >> 24;
 
			Mem[C1] = z & 0xFF;
			Mem[C1 + 1] = (z >> 8) & 0xFF;
			Mem[C2] = (z >> 16) & 0xFF;
			Mem[C2 + 1] = z >> 24;
 
			BitReset(Mem[D1], 0);
			methodC();
 
			seinouDataCnt++;
 
		if(seinouDataCnt == SEINOUCOUNT){
			complete_flg = true;
		}
		
		/** 性能測定 end **/
 
	}
	while (!complete_flg);
 
---------- 外部定義関数 -------------------------
#define NOT_OP(var) (strcmp(typeid(var).name(), "bool") ? ~(var) : !(var))
 
void __fastcall BitReset(unsigned char & Data, unsigned char x) {
	Data = Data & (NOT_OP(1 << x));
}
 
void __fastcall BitSet(unsigned char & Data, unsigned char x) {
	Data = Data | (1 << x);
}
 
void __fastcall methodC() {
	BitSet(Mem[F1], 5);
}


[質問2で作成した測定プログラム]Delphi

---------------- 測定メインファイル ------------------------------
  repeat
      // 性能測定 start ★ここから「性能測定 end」までの処理を約2万回ループさせその時間を測定
      x := Mem[A1]+(Mem[A1+1] shl 8)+(Mem[A2] shl 16)+(Mem[A2+1] shl 24);
      y := Mem[B1]+(Mem[B1+1] shl 8)+(Mem[B1] shl 16)+(Mem[B1+1] shl 24);
 
      z := x mod y;
      x := x div y;
 
      Mem[A1  ] :=  x         and $FF;
      Mem[A1+1] := (x shr  8) and $FF;
      Mem[A2  ] := (x shr 16) and $FF;
      Mem[A2+1] :=  x shr 24;
 
      Mem[C1  ] :=  y         and $FF;
      Mem[C1+1] := (y shr  8) and $FF;
      Mem[C2  ] := (y shr 16) and $FF;
      Mem[C2+1] :=  y shr 24;
 
      BitReset(Mem[D1], 0);
      methodC;
      
      inc(seinouDataCnt);
    
    if (seinouDataCnt = SEINOUCOUNT) then
    begin
    	complete_flg := true;
    end;
    
    // 性能測定 end
 
  until (complete_flg); 
  
---------- 外部定義関数 -------------------------
 procedure BitReset(var Data: Byte; x: Byte);
begin
  Data := Data and (not (1 shl x));
end;
 
procedure BitSet(var Data: Byte; x: Byte);
begin
  Data := Data or (1 shl x);
end;
 
procedure SetMDIntrRequest;
begin
  BitSet(Mem[F1], 5);
end;

=========================================================================================================
■開発環境
RAD Studio XE8(C++ Builder)
OS:Windows7 Proffesional 64bit版

Edited by: akio matsunaga on Nov 17, 2015 5:01 PM

Edited by: akio matsunaga on Nov 17, 2015 5:04 PM

Edited by: akio matsunaga on Nov 17, 2015 5:04 PM

Edited by: akio matsunaga on Nov 17, 2015 5:07 PM
igy kk

Posts: 147
Registered: 9/11/03
Re: DelphiとC++ Builderの処理性能差について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Nov 17, 2015 1:39 AM   in response to: akio matsunaga in response to: akio matsunaga
ちなみに、ビルド構成は、どのようになっていますか?

ビルド構成の概要
http://docwiki.embarcadero.com/RADStudio/XE8/ja/%E3%83%93%E3%83%AB%E3%83%89%E6%A7%8B%E6%88%90%E3%81%AE%E6%A6%82%E8%A6%81


akio matsunaga wrote:
 <確認事項>
  1.処理性能の劣化がコンパイラの性能によるものだとした場合、最適化する手段はあるのか。
  2.C++ Builderの配列アクセスや演算処理が遅い原因は何なのか。
  3.配列アクセスや演算処理を行う際、C++コードの記述(演算の記述方法等)に留意点等はあるのか。
  4.PascalコードとC++コードとで、関数呼び出しの処理速度に差があるのか。
  5.C++ Builderのほうが遅くなる処理は他にどういったものがあるのか。

3.対策について
 処理速度の改善策があればご教示ください。
 ※ 性能が劣化しているビジネスロジックをVC++で再構築し、dll化することで性能改善を図るなど、
   現在の開発環境にとらわれず、改善の可能性がある手段をご提示頂けると幸いです。
akio matsunaga

Posts: 4
Registered: 10/18/01
Re: DelphiとC++ Builderの処理性能差について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Nov 17, 2015 8:53 PM   in response to: igy kk in response to: igy kk
ご返信ありがとうございます。

ビルド構成はReleas構成です。(比較対象のDelphiもRelease構成)

以下の最適化オプションは当初チェックがついていなかったためそれぞれチェックを付けてビルドし、
測定し直していますがいずれも処理速度の改善は見られませんでした。

プロジェクトオプション->C++コンパイラは->最適化
[できるだけ小さいコードを生成する][できるだけ速いコードを生成する][選択した最適化を有効にする]

以上よろしくお願いします。

igy kk wrote:
ちなみに、ビルド構成は、どのようになっていますか?

ビルド構成の概要
http://docwiki.embarcadero.com/RADStudio/XE8/ja/%E3%83%93%E3%83%AB%E3%83%89%E6%A7%8B%E6%88%90%E3%81%AE%E6%A6%82%E8%A6%81
sana hi

Posts: 3
Registered: 2/7/07
Re: DelphiとC++ Builderの処理性能差について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Nov 17, 2015 11:13 PM   in response to: akio matsunaga in response to: akio matsunaga
sanahiです。

NOT_OPが遅そうです。
delphi側にもないし。

未確認で恐縮ですが、以下のような感じではだめですか?

Data = Data & (~((unsigned char)1 << x));

akio matsunaga wrote:
はじめまして投稿させて頂きます。
松永と申します。


Delphi 7で作成したアプリケーションをDelphi XE8にアップデートするとともにPascalからC++への
マイグレーション作業を実施しております。
しかしながら、マイグレーション実施後にC++アプリケーションの性能測定を実施したところ、実施前のDelphiアプリケーションと
くらべ約3倍の性能劣化が発生し、運用に耐えうる性能が出せておりません。
現在、各処理のポイントポイントで測定を行っておりますが、未だに処理遅延の決定的な原因の特定に至っていない状況です。

以下に質問事項を記載させて頂いておりますので、ご回答頂けるものについてだけでも結構ですのでご返信を頂けないでしょうか。

以上よろしくお願いいたします。


=========================================================================================================
■質問事項
1.DelphiとC++ Builderの性能差について
 Delphi環境からC++ Builder環境へのマイグレーション手順として、PascalコードをC++コードに手動変換(※)
 したものを、RAD Studio XE8(C++ Builder)上でビルドし、C++アプリケーションを作成しております。

 ソースコードの変換のみで機能の変更、追加等は実施しておりませんが、マイグレーション前とくらべ3倍の
 性能劣化が発生する原因として、何が考えられるでしょうか。
 ※ ヘッダファイルはRAD Studio XE8(Delphi)のC++出力オプションで出力
   ソースファイルはdelphiソースを手動でC++に変換
   VCLやDelphi RTLはそのまま使用

 <確認事項>
  1.DelphiとくらべC++ Builderのほうが処理速度が遅くなるのは仕方ないのか。
  2.その場合、C++ Builderの処理が遅いのは、どういったメカニズムによるものなのか。
  3.VCLやDelphi RTLを使用しているが、C++に変換する際の留意点等はあるのか。

2.VCLやDelphi RTLに依存しないC++コードの処理性能について
 VCLやDelphi RTLに依存しないC++コードで処理性能にどれだけの違いがあるのか検証する為、
 ループ、配列アクセス、演算処理、関数呼び出しを組み込んだテストプログラム(※)を作成し、
 性能比較を実施しました。

 ループ処理だけを実装したテストプログラムでは、ほぼ同等の結果となりましたが、テストプログラムの中に
 配列アクセス、演算処理、関数呼び出しを組み込むとPascalコードに比べC++コードでは約2倍の処理時間が
 かかる結果となりました。

 VCLやDelphi RTLに依存しないコードであっても処理性能が劣化する原因として、何が考えられるでしょうか。

 <確認事項>
  1.処理性能の劣化がコンパイラの性能によるものだとした場合、最適化する手段はあるのか。
  2.C++ Builderの配列アクセスや演算処理が遅い原因は何なのか。
  3.配列アクセスや演算処理を行う際、C++コードの記述(演算の記述方法等)に留意点等はあるのか。
  4.PascalコードとC++コードとで、関数呼び出しの処理速度に差があるのか。
  5.C++ Builderのほうが遅くなる処理は他にどういったものがあるのか。

3.対策について
 処理速度の改善策があればご教示ください。
 ※ 性能が劣化しているビジネスロジックをVC++で再構築し、dll化することで性能改善を図るなど、
   現在の開発環境にとらわれず、改善の可能性がある手段をご提示頂けると幸いです。

=========================================================================================================
[質問2で作成した測定プログラム]C++

 
---------------- 測定メインファイル ------------------------------
	do {
 
		/** 性能測定 start **/ ★ここから「性能測定 end」までの処理を約2万回ループさせその時間を測定
		int T;
		unsigned long x;
		unsigned long y;
		unsigned long z;
 
 
			x = Mem[A1] + (Mem[A1 + 1] << 8) + (Mem[A2] << 16) + (Mem[A2 + 1] << 24);
			y = Mem[B1] + (Mem[B1 + 1] << 8) + (Mem[B2] << 16) + (Mem[B2 + 1] << 24);
 
			z = x % y;
			x = x /* div */ / y;
 
			Mem[A1] = x & 0xFF;
			Mem[A1 + 1] = (x >> 8) & 0xFF;
			Mem[A2] = (x >> 16) & 0xFF;
			Mem[A2 + 1] = x >> 24;
 
			Mem[C1] = z & 0xFF;
			Mem[C1 + 1] = (z >> 8) & 0xFF;
			Mem[C2] = (z >> 16) & 0xFF;
			Mem[C2 + 1] = z >> 24;
 
			BitReset(Mem[D1], 0);
			methodC();
 
			seinouDataCnt++;
 
		if(seinouDataCnt == SEINOUCOUNT){
			complete_flg = true;
		}
		
		/** 性能測定 end **/
 
	}
	while (!complete_flg);
 
---------- 外部定義関数 -------------------------
#define NOT_OP(var) (strcmp(typeid(var).name(), "bool") ? ~(var) : !(var))
 
void __fastcall BitReset(unsigned char & Data, unsigned char x) {
	Data = Data & (NOT_OP(1 << x));
}
 
void __fastcall BitSet(unsigned char & Data, unsigned char x) {
	Data = Data | (1 << x);
}
 
void __fastcall methodC() {
	BitSet(Mem[F1], 5);
}


[質問2で作成した測定プログラム]Delphi
 
---------------- 測定メインファイル ------------------------------
  repeat
      // 性能測定 start ★ここから「性能測定 end」までの処理を約2万回ループさせその時間を測定
      x := Mem[A1]+(Mem[A1+1] shl 8)+(Mem[A2] shl 16)+(Mem[A2+1] shl 24);
      y := Mem[B1]+(Mem[B1+1] shl 8)+(Mem[B1] shl 16)+(Mem[B1+1] shl 24);
 
      z := x mod y;
      x := x div y;
 
      Mem[A1  ] :=  x         and $FF;
      Mem[A1+1] := (x shr  8) and $FF;
      Mem[A2  ] := (x shr 16) and $FF;
      Mem[A2+1] :=  x shr 24;
 
      Mem[C1  ] :=  y         and $FF;
      Mem[C1+1] := (y shr  8) and $FF;
      Mem[C2  ] := (y shr 16) and $FF;
      Mem[C2+1] :=  y shr 24;
 
      BitReset(Mem[D1], 0);
      methodC;
      
      inc(seinouDataCnt);
    
    if (seinouDataCnt = SEINOUCOUNT) then
    begin
    	complete_flg := true;
    end;
    
    // 性能測定 end
 
  until (complete_flg); 
  
---------- 外部定義関数 -------------------------
 procedure BitReset(var Data: Byte; x: Byte);
begin
  Data := Data and (not (1 shl x));
end;
 
procedure BitSet(var Data: Byte; x: Byte);
begin
  Data := Data or (1 shl x);
end;
 
procedure SetMDIntrRequest;
begin
  BitSet(Mem[F1], 5);
end;

=========================================================================================================
■開発環境
RAD Studio XE8(C++ Builder)
OS:Windows7 Proffesional 64bit版

Edited by: akio matsunaga on Nov 17, 2015 5:01 PM

Edited by: akio matsunaga on Nov 17, 2015 5:04 PM

Edited by: akio matsunaga on Nov 17, 2015 5:04 PM

Edited by: akio matsunaga on Nov 17, 2015 5:07 PM

Edited by: sana hi on Nov 18, 2015 4:23 PM
akio matsunaga

Posts: 4
Registered: 10/18/01
Re: DelphiとC++ Builderの処理性能差について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Nov 18, 2015 2:32 AM   in response to: sana hi in response to: sana hi
ご指摘ありがとうございます。

ご指摘のとおり、こちらでも調査を行った結果、遅れの要因の一部がNOT_OPにあることが分かりました。
(本マクロはDelphiではbit演算子と論理演算子に区別がない一方、C++では区別する必要があるため
DelphiソースをC++ソースに変換時に適切な方のNOT演算の処理を行うよう追加したものでした)

ただし、NOT_OP使用個所について全て'~'または'!'に置き換え再測定を行ったところ
アプリ全体の動きとしては若干早くなってのですが(Delphiアプリとの遅延差17msが15msへと2ms改善)
依然、大幅な性能劣化が発生しております。

このためNOT_OP以外にもまだ遅延要因となるような隠れていると考えております。
他に遅延要因として考えられる点がございましたら引き続きご指摘をよろしくお願いします。

以上です。


sana hi wrote:
sanahiです。

NOT_OPが遅そうです。
delphi側にもないし。

未確認で恐縮ですが、以下のような感じではだめですか?

Data = Data & (~((unsigned char)1 << x));

akio matsunaga wrote:
はじめまして投稿させて頂きます。
松永と申します。


Delphi 7で作成したアプリケーションをDelphi XE8にアップデートするとともにPascalからC++への
マイグレーション作業を実施しております。
しかしながら、マイグレーション実施後にC++アプリケーションの性能測定を実施したところ、実施前のDelphiアプリケーションと
くらべ約3倍の性能劣化が発生し、運用に耐えうる性能が出せておりません。
現在、各処理のポイントポイントで測定を行っておりますが、未だに処理遅延の決定的な原因の特定に至っていない状況です。

以下に質問事項を記載させて頂いておりますので、ご回答頂けるものについてだけでも結構ですのでご返信を頂けないでしょうか。

以上よろしくお願いいたします。


=========================================================================================================
■質問事項
1.DelphiとC++ Builderの性能差について
 Delphi環境からC++ Builder環境へのマイグレーション手順として、PascalコードをC++コードに手動変換(※)
 したものを、RAD Studio XE8(C++ Builder)上でビルドし、C++アプリケーションを作成しております。

 ソースコードの変換のみで機能の変更、追加等は実施しておりませんが、マイグレーション前とくらべ3倍の
 性能劣化が発生する原因として、何が考えられるでしょうか。
 ※ ヘッダファイルはRAD Studio XE8(Delphi)のC++出力オプションで出力
   ソースファイルはdelphiソースを手動でC++に変換
   VCLやDelphi RTLはそのまま使用

 <確認事項>
  1.DelphiとくらべC++ Builderのほうが処理速度が遅くなるのは仕方ないのか。
  2.その場合、C++ Builderの処理が遅いのは、どういったメカニズムによるものなのか。
  3.VCLやDelphi RTLを使用しているが、C++に変換する際の留意点等はあるのか。

2.VCLやDelphi RTLに依存しないC++コードの処理性能について
 VCLやDelphi RTLに依存しないC++コードで処理性能にどれだけの違いがあるのか検証する為、
 ループ、配列アクセス、演算処理、関数呼び出しを組み込んだテストプログラム(※)を作成し、
 性能比較を実施しました。

 ループ処理だけを実装したテストプログラムでは、ほぼ同等の結果となりましたが、テストプログラムの中に
 配列アクセス、演算処理、関数呼び出しを組み込むとPascalコードに比べC++コードでは約2倍の処理時間が
 かかる結果となりました。

 VCLやDelphi RTLに依存しないコードであっても処理性能が劣化する原因として、何が考えられるでしょうか。

 <確認事項>
  1.処理性能の劣化がコンパイラの性能によるものだとした場合、最適化する手段はあるのか。
  2.C++ Builderの配列アクセスや演算処理が遅い原因は何なのか。
  3.配列アクセスや演算処理を行う際、C++コードの記述(演算の記述方法等)に留意点等はあるのか。
  4.PascalコードとC++コードとで、関数呼び出しの処理速度に差があるのか。
  5.C++ Builderのほうが遅くなる処理は他にどういったものがあるのか。

3.対策について
 処理速度の改善策があればご教示ください。
 ※ 性能が劣化しているビジネスロジックをVC++で再構築し、dll化することで性能改善を図るなど、
   現在の開発環境にとらわれず、改善の可能性がある手段をご提示頂けると幸いです。

=========================================================================================================
[質問2で作成した測定プログラム]C++

 
---------------- 測定メインファイル ------------------------------
	do {
 
		/** 性能測定 start **/ ★ここから「性能測定 end」までの処理を約2万回ループさせその時間を測定
		int T;
		unsigned long x;
		unsigned long y;
		unsigned long z;
 
 
			x = Mem[A1] + (Mem[A1 + 1] << 8) + (Mem[A2] << 16) + (Mem[A2 + 1] << 24);
			y = Mem[B1] + (Mem[B1 + 1] << 8) + (Mem[B2] << 16) + (Mem[B2 + 1] << 24);
 
			z = x % y;
			x = x /* div */ / y;
 
			Mem[A1] = x & 0xFF;
			Mem[A1 + 1] = (x >> 8) & 0xFF;
			Mem[A2] = (x >> 16) & 0xFF;
			Mem[A2 + 1] = x >> 24;
 
			Mem[C1] = z & 0xFF;
			Mem[C1 + 1] = (z >> 8) & 0xFF;
			Mem[C2] = (z >> 16) & 0xFF;
			Mem[C2 + 1] = z >> 24;
 
			BitReset(Mem[D1], 0);
			methodC();
 
			seinouDataCnt++;
 
		if(seinouDataCnt == SEINOUCOUNT){
			complete_flg = true;
		}
		
		/** 性能測定 end **/
 
	}
	while (!complete_flg);
 
---------- 外部定義関数 -------------------------
#define NOT_OP(var) (strcmp(typeid(var).name(), "bool") ? ~(var) : !(var))
 
void __fastcall BitReset(unsigned char & Data, unsigned char x) {
	Data = Data & (NOT_OP(1 << x));
}
 
void __fastcall BitSet(unsigned char & Data, unsigned char x) {
	Data = Data | (1 << x);
}
 
void __fastcall methodC() {
	BitSet(Mem[F1], 5);
}


[質問2で作成した測定プログラム]Delphi
 
---------------- 測定メインファイル ------------------------------
  repeat
      // 性能測定 start ★ここから「性能測定 end」までの処理を約2万回ループさせその時間を測定
      x := Mem[A1]+(Mem[A1+1] shl 8)+(Mem[A2] shl 16)+(Mem[A2+1] shl 24);
      y := Mem[B1]+(Mem[B1+1] shl 8)+(Mem[B1] shl 16)+(Mem[B1+1] shl 24);
 
      z := x mod y;
      x := x div y;
 
      Mem[A1  ] :=  x         and $FF;
      Mem[A1+1] := (x shr  8) and $FF;
      Mem[A2  ] := (x shr 16) and $FF;
      Mem[A2+1] :=  x shr 24;
 
      Mem[C1  ] :=  y         and $FF;
      Mem[C1+1] := (y shr  8) and $FF;
      Mem[C2  ] := (y shr 16) and $FF;
      Mem[C2+1] :=  y shr 24;
 
      BitReset(Mem[D1], 0);
      methodC;
      
      inc(seinouDataCnt);
    
    if (seinouDataCnt = SEINOUCOUNT) then
    begin
    	complete_flg := true;
    end;
    
    // 性能測定 end
 
  until (complete_flg); 
  
---------- 外部定義関数 -------------------------
 procedure BitReset(var Data: Byte; x: Byte);
begin
  Data := Data and (not (1 shl x));
end;
 
procedure BitSet(var Data: Byte; x: Byte);
begin
  Data := Data or (1 shl x);
end;
 
procedure SetMDIntrRequest;
begin
  BitSet(Mem[F1], 5);
end;

=========================================================================================================
■開発環境
RAD Studio XE8(C++ Builder)
OS:Windows7 Proffesional 64bit版

Edited by: akio matsunaga on Nov 17, 2015 5:01 PM

Edited by: akio matsunaga on Nov 17, 2015 5:04 PM

Edited by: akio matsunaga on Nov 17, 2015 5:04 PM

Edited by: akio matsunaga on Nov 17, 2015 5:07 PM

Edited by: sana hi on Nov 18, 2015 4:23 PM
sana hi

Posts: 3
Registered: 2/7/07
Re: DelphiとC++ Builderの処理性能差について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Nov 18, 2015 2:50 AM   in response to: akio matsunaga in response to: akio matsunaga
sanahiです。

とりあえず、Delphiと合わせるために、変数宣言はループの外にするとか。
あと、リリース版でコンパイルされてますよねー


(本マクロはDelphiではbit演算子と論理演算子に区別がない一方、C++では区別する必要があるため
DelphiソースをC++ソースに変換時に適切な方のNOT演算の処理を行うよう追加したものでした)

ここでやってるのはどうみてもビット演算ですから ~ でいいんじゃないかとおもいます。

Edited by: sana hi on Nov 18, 2015 7:59 PM

Edited by: sana hi on Nov 18, 2015 8:03 PM
akio matsunaga

Posts: 4
Registered: 10/18/01
Re: DelphiとC++ Builderの処理性能差について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Nov 18, 2015 4:06 AM   in response to: sana hi in response to: sana hi
松永です。

はい、測定ではC++及びDelphiともRelease版でビルドしたものを使用しております。

とりあえず、Delphiと合わせるために、変数宣言はループの外にするとか。
こちらについては試してみますので結果が出ましたらご報告させて頂きます。

以上です。

sana hi wrote:
sanahiです。

とりあえず、Delphiと合わせるために、変数宣言はループの外にするとか。
あと、リリース版でコンパイルされてますよねー


(本マクロはDelphiではbit演算子と論理演算子に区別がない一方、C++では区別する必要があるため
DelphiソースをC++ソースに変換時に適切な方のNOT演算の処理を行うよう追加したものでした)

ここでやってるのはどうみてもビット演算ですから ~ でいいんじゃないかとおもいます。

Edited by: sana hi on Nov 18, 2015 7:59 PM

Edited by: sana hi on Nov 18, 2015 8:03 PM
Legend
Helpful Answer (5 pts)
Correct Answer (10 pts)

Server Response from: ETNAJIVE02