C語言程式判斷計算機的CPU大小端

2021-10-22 10:55:21 字數 1433 閱讀 5167

如何判斷一台計算機的cpu是大端還是小字端對齊呢?

那麼首先得了解何為大端,何為小端,明確一下概念。

所謂大端模式,是指字資料的高位元組儲存在低位址中,而字資料的低位元組則存放在高位址中。

big-endian 和 little-endian 位元組排序   

位元組排序                                              含義

big-endian    乙個word中的高位的byte放在記憶體中這個word區域的低位址處。 little-endian  乙個word中的低位的byte放在記憶體中這個word區域的低位址處。

必須注意的是:表中乙個word的長度是16位,乙個byte的長度是8位。如果乙個數超過乙個word的長度,必須先按word分成若干部分,然後每一部分(即每個word內部)按big-endian或者little-endian的不同操作來處理位元組。 乙個例子: 如果我們將0x1234abcd寫入到以0x0000開始的記憶體中,則結果為                  big-endian      little-endian 0x0000      0x12                0xcd 0x0001      0x34               0xab 0x0002      0xab               0x34 0x0003      0xcd               0x12 除了moto的68k系列和dec的sparc是big endian外,常見的cpu都是little endian。arm同時支援 big和little,實際應用中通常使用little endian,,intel系列的cpu就是little endian的。

那麼如何使用c語言程式判斷cpu是大端還是小端對齊呢?

有幾個方法:

方法一:直接使用看變數的記憶體值,這裡需要使用一些除錯技巧。

#includevoid main()
以十六進製制輸出short型變數s在記憶體中的位元組分布。

執行結果為:

0012ff7c

34 12

方法二:使用c中的共用體:

請寫乙個c函式,若處理器是big_endian的,則返回false;若是little_endian的,則返回true。

bool islitte_endian()

union wc;

c.a=1;

return (c.b==1);

方法三:強制型別轉換,和共用體的做法差不多。

bool islitte_endian()

int wtest = 0x12345678;

short *ptest=(short*)&wtest;

return !(0x1234 == ptest[0]);

宣告:

計算機CPU效能的度量

我們在使用計算機,或者編寫程式時,都希望通過一定的引數去度量計算機或者程式的效能。時間常用來度量計算機效能。完成任務所需時間越少,計算機越快。這是我們期望看到的。時間是唯一能夠被完全可靠測量的計算機效能指標。我們都知道計算機中乙個重要的效能指標 主頻,又叫時鐘頻率,單位一般是hz。若一台計算機的主頻...

計算機中的CPU

今天寫一下計算機中最核心的一部分,就是計算機的大腦 cpu。cpu也就是 處理器 central processing unit 處理器是一塊超大規模的積體電路,是一台計算機的運算核心 core 和控制核心 control unit 它的功能主要是解釋計算機指令以及處理計算機軟體中的資料。1 cpu...

C 構建自己的計算機 ,C 機器語言程式

題目出自 c 大學教程第五版 需要建立乙個稱為 tron的計算機,其中所有的資訊都是由帶符號的4位十進位制數組成的 字 來助理,前兩位是操作碼,之後的兩位是記憶體位置,需要將各操作碼的功能實現,話不多說,直接上 include include include include using namesp...