簡體   English   中英

編寫一個C / C ++程序來查找機器是32位還是64位

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM