0

我正在使用 Qt 编写软件。我的任务之一是判断Windows操作系统是32位还是64位,然后根据这个事实进行以下操作。

但是,当我尝试“ QSysInfo::WordSize ”时,它总是返回 32 而我实际上是在 Windows 7-64 位操作系统上运行。我也试过

#ifdef _WIN32
return 32;
#elif _WIN64
return 64;

这也返回 32。

实际上 Qt 在我的系统中是 32 位的。那是问题吗?如何获得 Windows 的实际字长?

谢谢

4

4 回答 4

2

我个人会打电话GetNativeSystemInfo检查该wProcessorArchitecture字段的值。

和宏_WIN32_WIN64所有宏一样,在编译时进行评估。它们告诉您可执行文件的体系结构,而不是运行可执行文件的系统体系结构。后面的信息,即您想要的信息,只能在运行时确定。

于 2012-05-10T08:21:16.947 回答
1

QSysInfo::WordSize 仅告诉您应用程序是在 32 位平台还是 64 位平台上编译的。所以,是的,以某种方式使用 32 位 Qt 编译将返回 32 的字长。

对于您的情况,您可能需要检查IsWow64Process

于 2012-05-10T08:17:40.450 回答
1

这应该适用于任何不使用“段寄存器”(IOW,具有适当平坦的内存空间)的系统上的任何 c++ 环境,包括 Qt 的:

uint32_t archwidth = sizeof(int *);    // arch width in bytes
uint32_t archbits  = 8 * archwidth;    // arch width in bits

这里的机制是:

在 64 位架构(如 XEON)上,CPU 将使用 8 字节(64 位)指针,因此archwidth将返回8;然后archbits8*864

在 32 位架构(如 68000)上,CPU 将使用 4 字节(32 位)指针,因此archwidth将返回4;然后archbits4*832

在 16 位架构(如 6809)上,CPU 将使用 2 字节(16 位)指针,因此archwidth将返回2;然后archbits2*816

于 2019-10-11T16:17:28.547 回答
-1

您可以使用Q_PROCESSOR_WORDSIZE(或此处)。我很惊讶它没有记录,因为它不在私有标头(QtGlobal)中并且非常方便。

对于某些用例,它可能更可取,因为它不依赖于处理器架构。(例如,它对 x86_64 以及 arm64 和许多其他的定义方式相同)

例子:

#include <QtGlobal>
#include <QDebug>

int main() {
#if Q_PROCESSOR_WORDSIZE == 4
    qDebug() << "32-bit executable";
#elif Q_PROCESSOR_WORDSIZE == 8
    qDebug() << "64-bit executable";
#else
    qDebug() << "Processor with unexpected word size";
#endif
}

甚至更好:

int main() {
    qDebug() << QStringLiteral("%1-bit executable").arg(Q_PROCESSOR_WORDSIZE * 8);
}
于 2018-11-29T15:35:57.753 回答