确定代码中当前程序集是否为 32/64 位的最简单方法

Simplest way to determine if current assembly is 32/64bit within the code

本文关键字:方法 最简单 是否 代码 程序集 前程      更新时间:2023-10-16

我想知道确定当前程序集(特别是:以编程方式检查程序本身)是 32 位还是 64 位代码的最简单方法是什么。

当前示例:我正在 Windows/VS 上构建一个 C++ 应用程序,该应用程序构建为 x86 和 x64 可执行文件并单独分发。

在程序中有一个例程,我必须检查当前正在运行的版本(可以这么说,程序必须意识到它自己的目标)。

我开始疯狂地调用 Win32 API,但所有这些都非常麻烦,基本上只是反映了操作系统如何执行程序。我敢肯定,一定有一种我不知道的更优雅的方式?你会如何处理这个问题?

谢谢!

template<std::size_t n>
constexpr bool Am_I_bit(){
  return (sizeof(void*)*CHAR_BIT)==n;
}
constexpr bool I_am_32_bit(){
  return Am_I_bit<32>();
}
constexpr bool I_am_64_bit(){
  return Am_I_bit<64>();
}

会在一些晦涩难懂的平台上失败,但你不是在构建这些平台。

inline bool is_32bit () { return sizeof (void *) <= 4; )

我认为不需要所有这些模板 - 如果您将其放在头文件中,无论如何都会内联。