如何判斷一台計算機的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...