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

时间:2013-09-15 00:17:40

标签: c++ c 32bit-64bit

自从我在大约一年前学会编程以来,我写了很多程序。我从来不明白为什么我要为我的32位和64位机器下载单独的程序。当我在一台32位机器上编写程序时,它在我的64位机器上运行。所以我的问题是你在C / C ++中可以做些什么来定义程序的位类型?

3 个答案:

答案 0 :(得分: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 ++中可以做些什么来定义程序的位类型

无。这取决于编译器。

答案 1 :(得分:1)

真的是什么? 64位计算机运行在不同的CPU架构上。 Theres ppc,arm,i386等一些较老的最着名的CPU是z80和6502.它们运行不同的指令集(二进制)。一些64位处理器扩展或能够使用广泛使用的i386 cpu的指令集运行。

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

C / C ++编译器将为机器生成指令(64位,32位,arm,ppc等),指令(也称为二进制)不同。有点像对机器说外语,它不明白该做什么

答案 2 :(得分: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;
}