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

时间:2019-01-31 21:45:16

标签: c++ architecture .net-assembly 32bit-64bit wow64

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

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

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

我开始对Win32 API进行了很多调用,但这些操作非常麻烦,并且基本上只是反映了OS如何执行程序。我确定必须有一种我不知道的更优雅的方式吗?您将如何处理?

谢谢!

2 个答案:

答案 0 :(得分:3)

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>();
}

在一些可笑的晦涩平台上会失败,但是您并没有在构建这些平台。

答案 1 :(得分:1)

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

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