【问题标题】:What makes a C/C++ program 32/64 bit? [closed]是什么让 C/C++ 程序成为 32/64 位? [关闭]
【发布时间】:2013-09-19 09:39:00
【问题描述】:

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

【问题讨论】:

  • 您的操作系统(最终是您的硬件)决定您的平台是 32 位还是 64 位。 到底是什么,你有什么不明白的?
  • 区别在于地址空间的大小。更大的地址空间意味着地址(指针)需要更多的位。您可以在 C++ 中定义位类型的方法是设置编译器标志,告诉它要生成什么样的代码。
  • "当我在一台 32 位机器上编写程序时,它会在我的 64 位机器上运行" => 不,至少不是直接的。它通过一个(不可见的)“仿真”层,让您认为它无缝运行。但实际上它们是完全不同的世界(如果只是因为公共汽车的大小)。
  • “是什么让 C/C++ 程序成为 32/64 位?”编译器。

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


【解决方案1】:

是什么让 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++ 中做什么来定义程序的位类型

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

【讨论】:

  • 感谢@Gabe 的编辑。
【解决方案2】:

真的是什么? 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 等)生成指令,并且指令(也称为二进制)是不同的。有点像对一台机器说一门外语,它不知道该怎么做

【讨论】:

  • 对不起,因为我的评论毫无用处,但我真的很喜欢你解释“架构”概念的方式,而且重要的不仅仅是 32 位和 64 位!干得好
【解决方案3】:

在 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;
}

【讨论】:

    猜你喜欢
    • 2019-10-04
    • 2014-07-31
    • 2010-09-11
    • 2012-09-01
    • 2020-07-18
    • 2021-06-09
    • 2014-02-03
    • 2017-04-07
    • 2011-10-18
    相关资源
    最近更新 更多