淺談計算機中cpu位數和指針

在刷題的時候看到了騰訊筆試題的這個問題
在這裏插入圖片描述
先解釋最後的強轉:
賦值操作的本質是傳送數據,而數據類型則是告訴CPU數據傳送的數量是多少。
強制類型轉換,就是當傳輸的源數據和目的數據數量不一樣的時候,就需要告訴CPU如果數據太多的話哪些數據需要截斷,如果數據不夠的話需要填充什麼信息(是全1還是全0或者別的東西)。
解決這個面試問題核心就是一個指針的長度
等價於這段代碼
在這裏插入圖片描述
如果還是不太清除,直接調試看看地址值
在這裏插入圖片描述
加一是移動的是一個int類型指針的大小,在32位系統中一個指針是4個字節,在64位系統中一個指針是8個字節。

隨着人們要求的不斷提升和硬件的飛速發展,64位的系統基本上達到目前的普及,(如果你64位操作系統指針是4字節,不要奇怪,這是爲了兼容32爲設計的)我們不難發現,好像經常見到不同位數的操作系統中不同值的問題,我們如果只是知道定義上的區別肯定是遠遠不夠的,我們就來探討一下區別。
我們一起來看下這幾個概念。
1:爲什麼會有不同位數之分?
補充個概念:
字長:在同一時間中處理二進制數的位數叫字長。

處理字長爲8位數據的CPU叫8位CPU,32位CPU就是在同一時間內處理字長爲32位的二進制數據,64位的CPU就是在同一時間處理64位的二進制數據,計算機在同一時間內處理的一組二進制數稱爲一個計算機的“字”,而這組二進制數的位數就是“字長。
字長反應了計算機的精度,適應不同的要求及協調運算精度和硬件造價間的關係,大多數計算機均支持變字長運算,即機內可實現半字長、全字長(或單字長)和雙倍字長運算。在其他指標相同時,字長越大計算機的處理數據的速度就越快。
在這裏插入圖片描述
字長由微處理器(CPU)對外數據通路的數據總線條數決定。
最小可尋址單位內存的最小可尋址單位通常都是字節。也就是說一個指針地址值可對應內存中一個字節的空間。

尋址空間
尋址空間一般指的是CPU對於內存尋址的能力。CPU最大能查找多大範圍的地址叫做尋址能力,CPU的尋址能力以字節爲單位 (字節是最小可尋址單位),如32位尋址的CPU可以尋址2的32次方大小的地址也就是4G,這也是爲什麼32位尋址的CPU最大能搭配4G內存的原因,再多的話CPU就找不到了。 這裏CPU的尋址位數是由地址總線的位數決定,32位CPU的尋址位數不一定是32位,因爲32位CPU中32的意義爲字長。
對於32位尋址的CPU,其地址值爲32位的二進制數,所以可以表示的最大地址爲2的32次方(一個指針的值就是一個32位的二進制數,32位對應4字節(Byte)。所以,指針的大小實際上是由CPU的尋址位數決定,而不是字長。
我們經常說和類型的字節長度和編譯器有關
例:
32位處理器上32位操作系統的32位編譯器,指針大小4字節。 32位處理器上32位操作系統的16位編譯器,指針大小2字節。 32位處理器上16位操作系統的16位編譯器,指針大小2字節。 16位處理器上16位操作系統的16位編譯器,指針大小2字節。
實際上:

實際不是這樣的,有這樣的結果是因爲以上幾種情況,處理器當前運行模式的尋址位數是不一樣的
在這裏插入圖片描述
如下: Intel 32位處理器32位運行模式,邏輯7尋址位數32,指針也就是32位,即4個字節 Intel 32位處理器16位虛擬機運行模式,邏輯尋址位數16,指針也就是16位,即2個字節 編譯器的作用是根據目標硬件(即CPU)的特性將源程序編譯爲可在該硬件上運行的目標文件。我們綜上可得指針大小是由當前CPU運行模式的尋址位數決定!
看完這個,我們是不是對於位數和指針有了更深刻的理解了呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章