C ++,用于检查软件是否在32位或64位系统上运行的功能

时间:2012-04-19 12:29:39

标签: c++ visual-studio-2008 32bit-64bit 32-bit

正如我在许多问题中解释的那样,我正在尝试将软件从32位系统转移到64位系统。 我有some problem with malloc() function,但现在我通过更正参数来解决它。

在我的代码中,如果我在32位系统上运行,我可以使用:

  

(int **)malloc(const * sizeof(int))

但是,在64位系统上,我必须使用:

  

(int **)malloc(const * sizeof(int64_t))

我想用 if()条件管理这些十字路口,所以我需要一个行为方式的布尔isIt64system()函数:

  

if(isIt64system())然后 [64位代码]

     

else [32位代码]

这个函数是否存在于C ++中? 是否有任何功能告诉我软件是在32位系统还是64位系统上运行?

3 个答案:

答案 0 :(得分:5)

不要编写两个与大小相关的分支,而只需编写一个正确的可移植代码路径。在你的情况下:

(int**)malloc(count*sizeof(int*));

无论系统上int*的大小是多少,这都能正常工作。

<小时/> 后记:从你对这个问题的字面答案中可以看出,你最好没有if:

if(sizeof(int*) == sizeof(int))
    x = (int**)malloc(count*sizeof(int));
else if (sizeof(int*) == sizeof(int64_t))
    x = (int**)malloc(count*sizeof(int64_t));

希望你能看到代码是多么荒谬,以及如何用一个构造良好的malloc调用代替它。

答案 1 :(得分:1)

您的编译器将具有预处理器定义,可以让您检查32位或64位。

答案 2 :(得分:0)

最好的方法是使用类似的东西

#ifdef __LP64__
    <64bit code>
#else
    <32bit code>
#endif

但如果你真的需要一个功能,那么这应该有用。

bool is64bit() {
    if (sizeof(int*) == 4) {
        return false;
    }
    return true;
}
相关问题