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