确定代码中当前程序集是否为 32/64 位的最简单方法
Simplest way to determine if current assembly is 32/64bit within the code
我想知道确定当前程序集(特别是:以编程方式检查程序本身)是 32 位还是 64 位代码的最简单方法是什么。
当前示例:我正在 Windows/VS 上构建一个 C++ 应用程序,该应用程序构建为 x86 和 x64 可执行文件并单独分发。
在程序中有一个例程,我必须检查当前的版本 运行(程序必须意识到它自己的目标,可以这么说)。
我开始对 Win32 API 进行大量调用,但所有这些都非常麻烦,基本上只是反映了 OS 如何执行程序。我确定必须有一种我不知道的更优雅的方式?你会如何处理?
谢谢!
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; )
我认为不需要所有这些模板 - 如果将它放在头文件中,无论如何都会内联。
我想知道确定当前程序集(特别是:以编程方式检查程序本身)是 32 位还是 64 位代码的最简单方法是什么。
当前示例:我正在 Windows/VS 上构建一个 C++ 应用程序,该应用程序构建为 x86 和 x64 可执行文件并单独分发。
在程序中有一个例程,我必须检查当前的版本 运行(程序必须意识到它自己的目标,可以这么说)。
我开始对 Win32 API 进行大量调用,但所有这些都非常麻烦,基本上只是反映了 OS 如何执行程序。我确定必须有一种我不知道的更优雅的方式?你会如何处理?
谢谢!
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; )
我认为不需要所有这些模板 - 如果将它放在头文件中,无论如何都会内联。