Visual Studioにおけるデバッグとリリース、x86、x64、Any CPUの違い

私はこれらの無関係なデバッグとリリースとx86、x64、Any CPUがほとんど人を殺したと思いました。

次のブログ投稿を読んで怖かったですが、モードを切り替えてプログラムをパスしたのも無理はありません。

 

転載:

1.https://www.cnblogs.com/xxn-180727/p/9442992.html

2.https://www.cnblogs.com/netserver/p/11106130.html

 

 

1.デバッグとリリース

1.違い   

    デバッグデバッグバージョンでは、生成された.exeに多くのデバッグ情報が含まれます。パッケージが直接送信される場合、パッケージは比較的大きくなります。

    リリースリリースバージョン

2.デバッグコンパイルとリリースコンパイルを区別する方法

    デバッグコンパイルにはマクロ定義_DEBUGがあります。_DEBUGがコードで定義されている場合はデバッグコンパイルを意味し、それ以外の場合はリリースです。

    コンパイル。

    例:#ifdef _DEBUG
    ........ //デバッグ中に実行され、リリース中には実行されません
    #そうしないと
    ........ //
 

次に、_WIN32および_WIN64

1.定義

  _WIN32は32ビットのコンパイルで、_WIN64は64ビットのコンパイルです。

  異なる桁数でコンパイルする理由は、ソフトウェアの汎用性を向上させるためです。まず、いくつかの常識を理解しましょう:

  • コンピューターのオペレーティングシステムのビット数が異なる場合、コード内の基本的なデータ型が占めるバイトも異なります。

     例:32ビットプラットフォームではlong longは8バイト(64ビット)、64ビットプラットフォームではlongは8バイト(64ビット)

  • 64ビットのオペレーティングシステムは理論的には32ビットおよび64ビットのソフトウェアを実行できますが、32ビットのオペレーティングシステムは32ビットのソフトウェアしか実行できません。

       それでは、ソフトウェアを異なるプラットフォームで実行するにはどうすればよいですか?メソッドはマクロ定義です。

例:#ifdef _WIN64
        typedef long int int64_t;
        #他
        _extension_
        typedefの長い長いint型int64_tの。

2. 32ビットコンパイルと64ビットコンパイルを区別する方法

       Win32構成では、_WIN32が定義され、_WIN64は定義されません。x64構成では、両方が定義されています。

     32ビットは64ビットをサポートしておらず、64ビットは32ビットと互換性があることがわかります。つまり、VCでは、_WIN32を定義する必要があります。

    したがって、_WIN64を使用してコンパイル環境が32ビットか64ビットかを判別し、WIN32または_WIN32を使用して
     それがWindowsシステムであるかどうかを判別します(クロスプラットフォームプログラム用)。
      通常、VSはwin32コンソールプログラムを選択し、win32でコンパイルします。互換性が優れているため、32ビットで操作できます。
     システム上で実行されますが、64ビットオペレーティングシステム上でも実行できます。
3.アプリケーション
1 _WIN64 // 64ビット命令の#ifdefは実施例コンパイルさ
 のtypedef 2 ロングロングintptr_tと、図3 の#else 
4 _W64のtypedef。INT intptr_t; 5 #endifの

 

 

 

 

 

 

Visual Studioにおけるデバッグとリリース、x86、x64、Any CPUの違い

 

Visual Studioでのデバッグとリリースの違い:

      Visual Studioには、デバッグモードとリリースモードの2つのコンパイルモードがあります。これはデフォルトの2つの方法でもあります。新しいプロジェクトを作成するとき、これらの2つのモードはすでに選択用に存在しています。

      デバッグは通常、デバッグバージョンと呼ばれ、デバッグ情報が含まれ、最適化は行われません。これは、プログラマがプログラムをデバッグするのに便利です。
      リリースはリリースバージョンと呼ばれ、多くの場合、最適化されているため、プログラムはコードサイズと実行速度が最適であり、ユーザーはそれを適切に使用できます。

SO:
      一般に、Releaseはパッケージ化とリリースプログラムに使用されます。これは、Releaseがより多くの最適化を行い、より高速に実行されるためです。これは、プロジェクトの完了後の展開に適しています。さらに、Releaseによってパッケージ化されるプログラムファイルは比較的小さくなります。デバッグモードは、開発とデバッグにより適しています。つまり、開発およびデバッグ時にはデバッグモードを使用し、プログラムのパッケージ化と公開にはリリースモードを使用します。

 

 

Visual Studioにおけるx86、x64、Any CPUの違い:

1.簡単に言うと、両者の最も直接的な違いは、x86プラットフォームでコンパイルされたexe(実行可能ファイル)またはdll(ダイナミックリンクライブラリ)がすべて32ビットであることです。x64は64ビットに対応します。Any CPUは、現在のオペレーティングシステムによって異なります。オペレーティングシステムが32ビットの場合、コンパイルされたプログラムは32ビットです。オペレーティングシステムが64ビットの場合、コンパイルされたプログラムは64ビットプログラムです。

2.スタートアッププロジェクト、メインプログラム(exeファイルとしてコンパイル)がx86プラットフォームでコンパイルされ、依存するプロジェクト(またはダイナミックリンクライブラリ)がx64プラットフォームでコンパイルされる場合、 「ファイルまたはアセンブリをロードできませんでした...またはその依存関係の1つ。不正な形式でプログラムをロードしようとしました。」などのエラー。これは、32ビットプログラムが64ビットdllをロードできず、クラス、メソッド、オブジェクトを呼び出すことができないためです。
逆に、メインプログラムがx64プラットフォームからコンパイルされ、dllがx86の場合はどうなりますか?答え。良くない!
そういえば、基本的に1つのことを決定できます。dllの生成プラットフォームとメインプログラムが一致している限りです。
それから質問が来ています!メインプログラムがAny CPUでコンパイルされ、dllがx86またはx64プラットフォームでコンパイルされている場合、またはメインプログラムがx86またはx64プラットフォームでコンパイルされており、dllがAny CPUでコンパイルされている場合はどうなりますか?正解は、「特別な状況」ではどちらも可能であるということです。なぜ「特別な場合」なのですか?最初の点も言及されているため、どのCPUもオペレーティングシステムに依存し、2番目の点で言及されているように、dllとメインプログラム生成プラットフォームが同じである限り、それも可能です。したがって、上記から、メインプログラムがAny CPUプラットフォームでコンパイルされる場合、dllをコンパイルするためのプラットフォームは、メインプログラムをコンパイルするためのオペレーティングシステムと一致している必要があります。メインプログラムがx86またはx64プラットフォームでコンパイルされている場合、dllはメインプログラムと一致している必要があります。ただし、特殊なケースがあります。dllがAny CPUによってコンパイルされる場合、dllは32ビットおよび64ビットのメインプログラムから呼び出すことができます。これはなぜですか?3点目をご覧ください。

3. Any CPUでコンパイルされたプログラムはオペレーティングシステムに依存しますが、Any CPUでコンパイルされたdllはそれを呼び出すメインプログラムに依存します。つまり、メインプログラムが32ビットの場合、dllも32ビットです。メインプログラムが64ビットの場合、DLLは64ビットです。したがって、dllは一般にAny CPUプラットフォームを使用してコンパイルされ、メインプログラム(exe)は一般にx86プラットフォームを使用してコンパイルされます。

概要:それらの違いを理解した後、プログラムをパッケージ化するときの選択方法がわかります。一般的に言って、顧客のコンピューターがどちらのタイプのオペレーティングシステム、またはその両方であるかが不明な場合、メインプログラムはx86プラットフォームでコンパイルされ、dllはAny CPUプラットフォームでコンパイルされます64ビットオペレーティングシステムであることが明らかな場合は、すべてx64プラットフォームでコンパイルできます。

Visual Studioでのデバッグとリリースの違い:

      Visual Studioには、デバッグモードとリリースモードの2つのコンパイルモードがあります。これはデフォルトの2つの方法でもあります。新しいプロジェクトを作成するとき、これらの2つのモードはすでに選択用に存在しています。

      デバッグは通常、デバッグバージョンと呼ばれ、デバッグ情報が含まれ、最適化は行われません。これは、プログラマがプログラムをデバッグするのに便利です。
      リリースはリリースバージョンと呼ばれ、多くの場合、最適化されているため、プログラムはコードサイズと実行速度が最適であり、ユーザーはそれを適切に使用できます。

SO:
      一般に、Releaseはパッケージ化とリリースプログラムに使用されます。これは、Releaseがより多くの最適化を行い、より高速に実行されるためです。これは、プロジェクトの完了後の展開に適しています。さらに、Releaseによってパッケージ化されるプログラムファイルは比較的小さくなります。デバッグモードは、開発とデバッグにより適しています。つまり、開発およびデバッグ時にはデバッグモードを使用し、プログラムのパッケージ化と公開にはリリースモードを使用します。

 

 

Visual Studioにおけるx86、x64、Any CPUの違い:

1.簡単に言うと、両者の最も直接的な違いは、x86プラットフォームでコンパイルされたexe(実行可能ファイル)またはdll(ダイナミックリンクライブラリ)がすべて32ビットであることです。x64は64ビットに対応します。Any CPUは、現在のオペレーティングシステムによって異なります。オペレーティングシステムが32ビットの場合、コンパイルされたプログラムは32ビットです。オペレーティングシステムが64ビットの場合、コンパイルされたプログラムは64ビットプログラムです。

2.スタートアッププロジェクト、メインプログラム(exeファイルとしてコンパイル)がx86プラットフォームでコンパイルされ、依存するプロジェクト(またはダイナミックリンクライブラリ)がx64プラットフォームでコンパイルされる場合、 「ファイルまたはアセンブリをロードできませんでした...またはその依存関係の1つ。不正な形式でプログラムをロードしようとしました。」などのエラー。これは、32ビットプログラムが64ビットdllをロードできず、クラス、メソッド、オブジェクトを呼び出すことができないためです。
逆に、メインプログラムがx64プラットフォームからコンパイルされ、dllがx86の場合はどうなりますか?答え。良くない!
そういえば、基本的に1つのことを決定できます。dllの生成プラットフォームとメインプログラムが一致している限りです。
それから質問が来ています!メインプログラムがAny CPUでコンパイルされ、dllがx86またはx64プラットフォームでコンパイルされている場合、またはメインプログラムがx86またはx64プラットフォームでコンパイルされており、dllがAny CPUでコンパイルされている場合はどうなりますか?正解は、「特別な状況」ではどちらも可能であるということです。なぜ「特別な場合」なのですか?最初の点も言及されているため、どのCPUもオペレーティングシステムに依存し、2番目の点で言及されているように、dllとメインプログラム生成プラットフォームが同じである限り、それも可能です。したがって、上記から、メインプログラムがAny CPUプラットフォームでコンパイルされる場合、dllをコンパイルするためのプラットフォームは、メインプログラムをコンパイルするためのオペレーティングシステムと一致している必要があります。メインプログラムがx86またはx64プラットフォームでコンパイルされている場合、dllはメインプログラムと一致している必要があります。ただし、特殊なケースがあります。dllがAny CPUによってコンパイルされる場合、dllは32ビットおよび64ビットのメインプログラムから呼び出すことができます。これはなぜですか?3点目をご覧ください。

3. Any CPUでコンパイルされたプログラムはオペレーティングシステムに依存しますが、Any CPUでコンパイルされたdllはそれを呼び出すメインプログラムに依存します。つまり、メインプログラムが32ビットの場合、dllも32ビットです。メインプログラムが64ビットの場合、DLLは64ビットです。したがって、dllは一般にAny CPUプラットフォームを使用してコンパイルされ、メインプログラム(exe)は一般にx86プラットフォームを使用してコンパイルされます。

概要:それらの違いを理解した後、プログラムをパッケージ化するときの選択方法がわかります。一般的に言って、顧客のコンピューターがどちらのタイプのオペレーティングシステム、またはその両方であるかが不明な場合、メインプログラムはx86プラットフォームでコンパイルされ、dllはAny CPUプラットフォームでコンパイルされます64ビットオペレーティングシステムであることが明らかな場合は、すべてx64プラットフォームでコンパイルできます。

おすすめ

転載: www.cnblogs.com/MCSFX/p/12670888.html