0

自从我大约一年前学习编程以来,我已经编写了很多程序。我永远无法理解为什么我必须为我的 32 位和 64 位机器下载单独的程序。当我在一台 32 位机器上编写程序时,它在我的 64 位机器上运行。所以我的问题是你可以在 C/C++ 中做什么来定义程序的位类型?

4

3 回答 3

6

是什么让 C/C++ 程序成为 32/64 位?

无论是 32 位还是 64 位,都在编译/链接时与其他东西(如目标体系结构)一起嵌入。

当我在一台 32 位机器上编写程序以在我的 64 位机器上运行时

假设您的操作系统是 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 架构上。Theres ppc、arm、i386 等一些较旧的最著名的 CPU 是 z80 和 6502。它们运行不同的指令集(二进制)。一些 64 位处理器扩展或能够与广泛使用的 i386 cpu 的指令集一起运行。

有 64 位 CPU 无法与其他 64 位 CPU 一起运行。64 位二进制文​​件肯定与 32 位不兼容,因为它们缺少很多指令。我还没有听说过支持某些 64 位指令的 32 位。那也没用,因为如果 CPU 不能支持 64 位,CPU 会更慢,因此运行 64 位二进制文​​件毫无意义

C/C++ 编译器会为机器(64 位、32 位、arm、ppc 等)生成指令,并且指令(也称为二进制)是不同的。有点像对一台机器说一门外语,它不知道该做什么

于 2013-09-15T00:34:58.667 回答
0

在 64 位机器上,比较这两个构建的输出:

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 回答