0

Qtを使ってソフトウェアを書いています。私の仕事の1つは、Windows OSが32ビットか64ビットかを判断し、その事実に基づいて次の操作を行うことです。

ただし、「QSysInfo :: WordSize」を試したところ、実際にWindows 7-64ビットOSで実行していると、常に32が返されます。私も試しました

#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、適切にフラットなメモリスペース)のQtを含むすべてのC++環境で機能するはずです。

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

ここでのメカニズムは次のとおりです。

64ビットアーキテクチャ(XEONなど)では、CPUは8バイト(64ビット)のポインタを使用するため、8archwidthを返します。そして、8 * 8、または64です。archbits

32ビットアーキテクチャ(68000など)では、CPUは4バイト(32ビット)のポインタを使用するため、4archwidthを返します。そして、4 * 8、または32です。archbits

16ビットアーキテクチャ(6809など)では、CPUは2バイト(16ビット)のポインタを使用するため、2archwidthを返します。そして、2 * 8、または16です。archbits

于 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 に答える