【发布时间】:2016-06-14 11:34:53
【问题描述】:
我已将我的应用程序编译为使用 x86 指令集,但我需要以编程方式了解运行可执行文件的机器是否支持 amd64 指令集。有没有一种简单的方法来解决这个问题(可能使用CPUID)?
应用程序需要能够在多个操作系统上运行,因此首选非基于操作系统的方法。
【问题讨论】:
-
这只是告诉我代码是为什么架构编译的,而不是代码的运行时模式
-
@doron:如果它是为 x86 编译的,它将不会使用 64 位指令,而当为 x64 编译时,它不能在 x86 上运行。您的问题看起来像是 XY 问题,您的目标是什么?
-
@Olaf 一个明显的例子是 32 位启动器,然后根据架构启动正确的可执行文件(32 位或 64 位)。
-
这实际上是相当没用的。您实际上并不关心处理器的本机功能是什么。重要的是主机操作系统支持什么。如果我有一个能够支持 x86-64 的 CPU,但我运行的是 32 位操作系统,那么任何应用程序都绝对不可能利用 64 位扩展。操作系统不支持它,因此处理器上未启用这些功能。所以你真的确实需要一种特定于操作系统的方法来检测这些信息。
-
@Olaf 不一定。许多支持 64 位的操作系统可以运行 32 位程序。完全可以将 32 位和 64 位可执行文件与单独的 32 位启动器一起分发,该启动器选择适当的可执行文件 - 如果操作系统/体系结构支持 64 位,则为 64 位,否则为 32 位。