[英]write a C/C++ program to find if a machine is 32 bit or 64 bit
我在網上搜索,無法獲得任何程序。
我發現以下鏈接大小的機器64或32位和處理64位機器的文件,但在32位機器上開發 。
現在很清楚sizeof(int *)不是這樣的。 因為它將根據用於編譯的機器的體系結構返回4/8。 那么如何找到呢?
條件:不要使用任何系統/操作系統/庫調用。
實際上這是在采訪中提出的一個問題。
32位系統地址空間不能滿足超過4GB的內存。 假設64位平台具有免費(可辯論)的數量,您可以嘗試在一個塊中分配超過4個gig。 這肯定會在32位系統上失敗。
這只是一個想法,我可能會被投票到地獄和背部,但這只是一個建議:)
將程序編譯為64位並嘗試是否可以在目標計算機上執行?
內聯組裝怎么樣? :)
這僅基於使用CPUID指令讀取的信息。 使用什么操作系統並不重要。
#include <iostream>
bool is64Bit()
{
int ExtendedFeatureFlags;
asm ( "mov $0x80000001, %%eax; " // 0x80000001 gets Extended Feature Flags
"cpuid; " // Call CPUID instruction.
"mov %%edx, %0; " // Copy EDX into first output variable.
:"=r"(ExtendedFeatureFlags) // Output variable.
: // No input variables.
:"%eax","%ebx","%ecx","%edx" // Clobbered registers.
);
return ExtendedFeatureFlags & (1<<29);
// If the 29th bit is on, the processor supports 64bit
// extensions.
}
int main()
{
std::cout << "Is 64bit?: " << (is64Bit() ? "YES" : "NO") << std::endl;
return 0;
}
如果你設法找到不使用操作系統調用的sizeof(int *)的任何方式,我會非常感動。 我認為你可能已經找到了他們想要的答案:p
使用C ++,64位機器上的64位編譯器的int應該是64位,對於32位機器也是如此,因此sizeof(int *)應該可以工作
如何創建一個自己創建simple.cpp文件的程序並試圖以兩種方式編譯它? :)
#include <stdio.h>
int main(void) {
printf("\n The Processor in this machine is %lu Bit Machine", sizeof(void *));
return 0;
}
32位環境設置int,long和指向32位的指針,並生成在任何i386系統上運行的代碼。
64位環境將int設置為32位,長指針設置為64位,並為AMD的x86-64架構生成代碼。
您可以使用
#include <stdio.h>
int main(){
long z; printf("Long int size is %i bytes long!\n", sizeof(z)); return 0;
}
並在gcc中使用-m32和-m64進行編譯。 如果它是一個64位平台程序將運行並輸出將是8其他程序將死亡。
如何在POSIX投訴系統上使用uname系統調用: http : //linux.die.net/man/2/uname所需信息將在機器字段中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.