在软件开发中,“架构”(Architecture)通常指 CPU 指令集架构(ISA, Instruction Set Architecture),影响编译器生成什么样的机器代码、操作系统如何调度指令、程序如何组织内存结构等。以下是常见的架构及其说明:
1 常见架构名称对比
| 架构别名 | 全称 / 正式名 | 位宽 | 厂商/平台 | 说明 |
|---|---|---|---|---|
x86 | IA-32 | 32 | Intel/AMD | 常见于 Windows 32 位系统 |
i386/i686 | 80386 / 80686 系列 | 32 | GNU/Linux 常用命名 | i686 为 32 位中较新版本 |
x64 | x86-64 的别称 | 64 | 通用别名(特别是 Windows) | Windows 平台通常这样写 |
amd64 | AMD64 / x86-64 | 64 | AMD 发起,Intel 支持 | Linux/GNU 工具链中常见 |
x86_64 | x86-64 | 64 | GNU/Linux 常用 | 通用 x64 架构 |
arm | ARMv7 | 32 | 移动设备/嵌入式系统 | 旧款手机、树莓派 1/2、路由器等 |
arm64 / aarch64 | ARMv8+ | 64 | Apple M1+/安卓新机 | Apple Silicon、ARM 服务器、安卓主流 |
riscv64 | RISC-V 64-bit | 64 | 新兴开放架构 | Linux/嵌入式系统增长迅速 |
mips | MIPS32 / MIPS64 | 32/64 | 路由器/嵌入式系统 | 旧嵌入式常见 |
wasm32 | WebAssembly 32-bit | 32 | 浏览器/边缘计算 | 目标是平台无关的运行时架构 |
2 x86 和 x64 关系说明
-
x86(有时等价于 i386/i686):指 32 位 Intel 架构(IA-32) -
x64、amd64、x86_64:都是指 x86 的 64 位扩展版本(x86-64)amd64是 AMD 首创的 64 位扩展标准x86_64是 GNU/Linux 下的标准命名x64是微软的通俗名称
它们在本质上是一样的 ISA,只是命名不同。
3 32 位与 64 位的差异
| 特性 | 32 位 (x86) | 64 位 (x86_64) |
|---|---|---|
| 地址空间大小 | 最大 4 GB | 理论上 16 EB(实际少得多) |
| 寄存器数量 | 少 | 更多的通用寄存器 |
| 寄存器位宽 | 32 位 | 64 位 |
| 数据吞吐能力 | 低一些 | 高,适合高性能场景 |
| 程序兼容性 | 老软件兼容好 | 老软件需通过兼容层 |
| 二进制兼容 | 不兼容 | 可在支持 x86 模拟器上运行 |
4 如何查看和选择架构(平台相关)
4.1.1 Windows 上
-
x86:32 位程序(Program Files (x86)) -
x64:64 位程序(Program Files) -
常见工具链标识:
x86-windows(vcpkg 中 32 位目标)x64-windows(64 位目标)x64-windows-static(静态链接)
4.1.2 Linux 上
-
通过命令查看:
uname -m # 输出 x86_64, aarch64 等 file my_binary # 查看 ELF 的目标架构 dpkg --print-architecture # Debian/Ubuntu 系统架构
4.1.3 macOS 上
- Intel 芯片:
x86_64 - Apple Silicon:
arm64/aarch64
5 在 CMake 中控制架构
使用 CMAKE_GENERATOR_PLATFORM 控制目标架构:
cmake -A x64 ..或者设置 toolchain 文件:
set(CMAKE_SYSTEM_PROCESSOR x86_64)6 在编译器中控制架构(MSVC/GCC/Clang)
6.1 MSVC:
/arch:IA32、/arch:AVX2控制指令集-m32、-m64不适用,需选不同工具链(x86/x64)
6.2 GCC/Clang:
-m32:编译成 32 位-m64:编译成 64 位-march=native:使用本机 CPU 指令集