![]() |
1
3
取决于应用程序类型。 正如其他人提到的,32位平台被视为不推荐使用,在64位平台上运行32位应用程序会带来一些开销。此外,正如您所提到的,编译器可以访问更多的寄存器和更高级的指令集。 由于本机指针的大小较小,在某些情况下,为32位编译的代码将具有显著的优势。 例如,我有一个带有“算法”代码的应用程序,它处理存储在具有交叉指针的复杂数据结构中的大型数据集。为32位平台编译的同一应用程序的内存占用明显更小,运行速度也更快。 因此,如果您的应用程序没有达到32位的限制,可以使用本机指针处理复杂的数据结构,并且性能至关重要—32位可能是一种可行的方法。否则,我建议切换到64位。 |
![]() |
2
3
64位模式下的寄存器访问改进是正确的,但您可能不知道差异有多大。
在x86上,以64位模式运行可以访问16个64位寄存器。在32位模式下,您只能访问8个32位寄存器。 而且,由于在任何情况下都有三个寄存器是程序计数器、堆栈指针和帧指针,因此可用的通用寄存器之间的差异更大。
因此,只需将编译标志从
除非您有特定的需要部署在较旧的32位硬件或操作系统上,否则没有理由编译32位x86应用程序。
在将代码移植到64位时要小心。仍然有太多的程序员将指针和
|
![]() |
3
2
WoW64 在…上 Intel 64 (AMD64/x64)不需要指令模拟。在这种情况下,WoW64子系统通过32位应用程序和64位Windows API之间的附加层,仅模拟32位环境。在某些地方,这一层很薄,而在其他地方,这一层稍厚一些。对于一个普通的程序,您可能会因为这个层而期望2%的性能损失。对于某些程序,它可以更大。2%并不多,但请记住,在64位Windows下,32位应用程序的工作速度比在32位环境下慢一些。 编译64位代码不仅可以避免使用WoW64,还可以提高性能。这可以通过微处理器中的架构修改来解释,例如通用寄存器数量的增加。对于一个普通的程序,仅在重新编译之后,您可能会期望性能提高5-15%。 由于WoW64层,32位程序在64位环境中的效率低于其本机32位环境。然而,简单的32位应用程序仍然可以从在64位环境中执行中获得一个好处。也许您知道,如果使用开关“/3gb”启动32位Windows,那么使用开关“/LargeAddressWare:YES”构建的程序最多可以分配3gb内存。嗯,在64位系统上构建的同一个32位程序可以分配几乎4 GB的内存(实际上通常是3.5 GB左右)。 P、 另请参见“第2课”。 Support of 32-bit applications in the 64-bit Windows environment ". |
![]() |
4
1
使用64位,因为在64位环境中运行32位有开销(尽管很小)。 |
![]() |
5
1
为什么不同时用这两种语言编译呢? 我推荐64位(AMD 64)。32位(x86)应用程序除了与非常旧的计算机兼容之外,没有其他优势。我相信比我知识更渊博的人可以指出AMD 64相对于x86的一些技术优势,但我怀疑这些不会对您的平均应用程序产生真正的影响。 但是,没有什么可以阻止您编译和分发这两个版本。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 3 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 4 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 4 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 4 月前 |