0

約 1 年前にプログラミングを学んで以来、私は多くのプログラムを作成してきました。なぜ 32 ビット マシンと 64 ビット マシンに別々のプログラムをダウンロードしなければならないのか、まったく理解できませんでした。1 台の 32 ビット マシンでプログラムを作成すると、64 ビット マシンで実行されます。私の質問は、プログラムのビット型を定義する C/C++ で何ができますか?

4

3 に答える 3

6

C/C++ プログラムを 32/64 ビットにするのは何ですか?

32 ビットであるか 64 ビットであるかは、ターゲット アーキテクチャなどの他の要素と共に、コンパイル/リンク時に組み込まれます。

1 台の 32 ビット マシンでプログラムを作成して、64 ビット マシンで実行する場合

OS が Windows で、アプリケーションを 32 ビット マシンでコンパイルし、32 ビットの実行可能ファイルを出力する (つまり、クロス コンパイルではない) と仮定すると、Windows にはWindows on Windows64 (WOW64) と呼ばれる 32 ビットを可能にするテクノロジがあります。 64 ビット オペレーティング システムで実行するコード。

32 ビット マシンと 64 ビット マシンで別々のプログラムをダウンロードしなければならない理由が理解できませんでした。

これは普遍的に当てはまるわけではなく、いくつかの個別のプログラムをダウンロードするだけで済みます。ドライバーのようなものは、カーネルとより密接に連携し、「ビットパリティ」を持つ必要があります。つまり、32 ビット オペレーティング システムを使用している場合は 32 ビット ドライバーが必要であり、64 ビット オペレーティング システムを使用している場合は 64 ビット ドライバーが必要です。

ほとんどの場合、WOW のおかげで 64 ビット Windows で 32 ビット アプリケーションを使用できます。

だから私の質問は、プログラムのビット型を定義する C/C++ で何ができますか?

何もない。それはコンパイラ次第です。

于 2013-09-15T00:19:30.947 に答える
1

えっ、ほんとう?64 ビット マシンは、異なる CPU アーキテクチャで実行されます。ppc、arm、i386 など、古い最も有名な CPU のいくつかは z80 と 6502 です。それらは異なる命令セット (バイナリ) を実行します。一部の 64 ビット プロセッサは、広く普及している i386 CPU の命令セットを拡張または実行できます。

他の 64 ビット CPU では実行できない 64 ビット CPU があります。多くの命令が欠落しているため、64 ビット バイナリは 32​​ ビットと互換性がありません。一部の 64 ビット命令をサポートする 32 ビットについては聞いたことがありません。64ビットをサポートできないとCPUが遅くなるため、64ビットバイナリを実行しても意味がないため、それも役に立ちません。

C/C++ コンパイラはマシン (64 ビット、32 ビット、アーム、ppc など) の命令を生成し、命令 (バイナリとも呼ばれます) は異なります。機械に外国語を話すようなもので、機械は何をすべきか理解していません。

于 2013-09-15T00:34:58.667 に答える
0

64 ビット マシンで、次の 2 つのビルドの出力を比較します。

g++ -Wall -Wextra -m32 bits.cpp

g++ -Wall -Wextra -m64 bits.cpp

#include <iostream>

int main() {
  std::cout << sizeof(void*) << std::endl;
  return 0;
}
于 2013-09-15T00:32:13.590 に答える