0

正如我在许多问题中解释的那样,我正在尝试将软件从 32 位系统迁移到 64 位系统。我对malloc() 函数有一些问题,但现在我通过更正一个参数来解决它。

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

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

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

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

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

if(isIt64system()) then [64 位代码]

其他[32 位代码]

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

4

3 回答 3

5

与其编写两个依赖于大小的分支,不如编写一个正确的、可移植的代码路径。在你的情况下:

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

无论int*系统上的 sizeof 大小如何,这都能正常工作。


后记:正如您从这个问题的字面答案中看到的那样,您最好不要使用 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调用替换。

于 2012-04-19T13:25:27.890 回答
1

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

于 2012-04-19T12:41:05.587 回答
0

最好的办法是使用这样的东西

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

但是,如果您真的需要一个功能,那么这应该可以工作。

bool is64bit() {
    if (sizeof(int*) == 4) {
        return false;
    }
    return true;
}
于 2012-04-19T13:31:40.773 回答