64 ビット アプリケーションには 64 ビット Windows が必要であることはわかっています。
64 ビットまたは 32 ビット専用の c/c++ コードはどれですか? 編集:ここで見つけました
実行時にプロセスのワードサイズを決定できますか: OS が 32 ビットか 64 ビットかを返し、適切なワードサイズでサブ/新しいプロセスを実行する 32 ビットアプリケーションがあるように。
64 ビット アプリケーションには 64 ビット Windows が必要であることはわかっています。
64 ビットまたは 32 ビット専用の c/c++ コードはどれですか? 編集:ここで見つけました
実行時にプロセスのワードサイズを決定できますか: OS が 32 ビットか 64 ビットかを返し、適切なワードサイズでサブ/新しいプロセスを実行する 32 ビットアプリケーションがあるように。
システムが 32 ビットか 64 ビットかは、GetNativeSystemInfo
. たとえば、次のようなことができます。
typedef void (WINAPI *GetNativeSystemInfo_t)(LPSYSTEM_INFO lpSystemInfo);
BOOL IsSystem64Bit()
{
HANDLE kernel32 = LoadLibrary("kernel32.dll");
SYSTEM_INFO si;
GetNativeSystemInfo_t GetNativeSystemInfoPtr
= (GetNativeSystemInfo_t)GetProcAddress(kernel32, "GetNativeSystemInfo");
if (GetNativeSystemInfoPtr == NULL)
return FALSE;
GetNativeSystemInfoPtr(&si);
return (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64);
}
関数が動的に解決される理由は、XP より前のバージョンの Windows には存在しないためです。(これらのバージョンの Windows では、システムが 64 ビットではないことが既にわかっています)
Windowsについてはよくわかりませんので、明らかにこれは有用性が限られていますが、Linuxでは実行時にワードサイズを決定できます。long int はワード サイズになります。64 ビット Linux では long は 64 ビットで、32 ビット Linux では 32 ビットです。
だから、これは本当にばかげて矛盾しているように見えますが、次のようなことができます
char ws[3];
sprintf(ws, "%d", sizeof(long));
fprintf(stderr, "%s\n", ws);
ws
次に、さまざまな値と比較して、単語のサイズを確認できます。Windows には、単語のサイズが何であるかを判断するのに役立つ、同等の基本型があると確信しています。