簡體   English   中英

不使用sizeof判斷CPU大小的C代碼

[英]C code to determine the size of CPU without using sizeof

有沒有辦法在不使用 sizeOf 運算符的情況下知道 CPU 是 32 位還是 64 位?

可以為此編寫任何其他代碼嗎?

在這個問題中如何確定給定的 Linux 是 32 位還是 64 位?

要檢查系統是 32 位還是 64 位內核,您可以調用

system("getconf LONG_BIT")

並檢查它的回報。 如果它說 64 它是一個 64 位內核,如果它是 32 它是 32 位內核。

要檢查 cpu 是否支持 64 位,您可以在文件 /proc/cpuinfo 中檢查它是否有標志“lm”(長模式)

system("grep flags /proc/cpuinfo | grep -c lm")

如果返回值為 1,則存在 lm 標志(64 位),如果為 0,則不存在(32 位)

這只是linux。 其他選項在開頭鏈接的問題中。 例如,有些包括檢查limits.h

您的代碼應該是為運行它的處理器構建的,因此它將在編譯器指令中。 看看數學庫如何處理它,然后這樣做。 不同的編譯器是不同的,但你不能用 C 代碼普遍地做到這一點。 例如:所有平台都應該支持 64 位值。 他們如何處理它們將取決於編譯器指令。

指針數學怎么樣? 取指針數組中兩個元素的地址,確定它們相距 8 字節還是 4 字節。

{
    char * pa[2];
    char * pa1 = (char *)&pa[1];
    char * pa0 = (char *)&pa[0];
    if (pa1 - pa0 > 4)
        /* 64 bit pointers */;
    else 
        /* ... */;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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