Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C/C++;程序32/64位?_C++_C_32bit 64bit - Fatal编程技术网

C++ C/C++;程序32/64位?

C++ C/C++;程序32/64位?,c++,c,32bit-64bit,C++,C,32bit 64bit,自从一年前学会编程以来,我已经写了很多程序。我一直不明白为什么我必须为我的32位和64位机器下载不同的程序。当我在一台32位机器上编写程序时,它会在我的64位机器上运行。那么我的问题是,在定义程序位类型的C/C++中,您可以做什么 是什么使C/C++程序成为32/64位的 无论是32位还是64位,都会在编译/链接时与其他内容(如目标体系结构)结合使用 当我在一台32位机器上编写一个程序在我的64位机器上运行时 假设您的操作系统是Windows,并且您在32位机器上编译应用程序并输出32位可执行文

自从一年前学会编程以来,我已经写了很多程序。我一直不明白为什么我必须为我的32位和64位机器下载不同的程序。当我在一台32位机器上编写程序时,它会在我的64位机器上运行。那么我的问题是,在定义程序位类型的C/C++中,您可以做什么


是什么使C/C++程序成为32/64位的

无论是32位还是64位,都会在编译/链接时与其他内容(如目标体系结构)结合使用

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

假设您的操作系统是Windows,并且您在32位机器上编译应用程序并输出32位可执行文件(即不交叉编译),那么Windows有一种称为(WOW64)的技术,允许32位代码在64位操作系统上运行

我永远无法理解为什么我必须为我的32位和64位机器下载不同的程序

这不是普遍正确的,你只需要下载一些单独的程序。驱动程序之类的东西与内核的接口更紧密,需要有“位奇偶校验”。也就是说,如果您有32位操作系统,您需要32位驱动程序;如果您有64位操作系统,您需要64位驱动程序

在大多数情况下,得益于WOW,您可以在64位Windows上使用32位应用程序

那么我的问题是,在定义程序位类型的C/C++中,您可以做什么


没什么。这取决于编译器。

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

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

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

#include <iostream>

int main() {
  std::cout << sizeof(void*) << std::endl;
  return 0;
}
#包括
int main(){

std::cout到底是什么?64位计算机运行在不同的CPU体系结构上。有ppc、arm、i386等。一些较老的最著名的CPU是z80和6502。它们运行不同的指令集(二进制)。一些64位处理器扩展或能够运行广泛使用的i386 CPU的指令集

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


C/C++编译器会为机器生成指令(64位、32位、arm、ppc等),而指令(也称为二进制)是不同的。有点像对机器说外语一样,它不知道该怎么做你的操作系统(最终是你的硬件)决定你的平台是32还是64位。到底你不明白什么?确切的差别是地址空间的大小。一个更大的地址空间意味着地址(指针)需要更多的比特。C++中你能做的定义比特类型的是设置编译器标志来告诉它要生成什么样的代码。“当我在一台32位机器上编写一个程序时,它会在我的64位机器上运行”=>不,它不会,至少不会直接运行。它通过一个(不可见的)“仿真”层,让你认为它可以无缝运行。但实际上,它们是完全不同的世界(如果只是因为总线大小)。“是什么让C/C++程序成为32/64位的?”?“编译器。感谢您的编辑,@Gabe.Sorry,因为我的评论毫无用处,但我真的很喜欢您解释“体系结构”概念的方式,它不仅仅是32位和64位才重要!干得好