應該說這是乙個非常基礎的問題,教科書上說指標大小和機器字長相同,即
32位機指標長度為
4位元組!但是對不對呢?為什麼是這樣?
搜了一下相關資料。。。居然發現回答不統一,很多人也同樣是糊里糊塗。
字長:在同一時間中處理二進位制數的位數叫字長。通常稱處理字長為
8位資料的
cpu叫8位
cpu,32位
cpu就是在同一時間內處理字長為
32位的二進位制資料。二進位制的每乙個0或
1是組成二進位制的最小單位
,稱為乙個位元(
bit)。
一般說來,計算機在同一時間內處理的一組二進位制數稱為乙個計算機的「字
」,而這組二進位制數的位數就是「字長
」。字長與計算機的功能和用途有很大的關係,是計算機的乙個重要技術指標。字長直接反映了一台計算機的計算精度,為適應不同的要求及協調運算精度和硬體造價間的關係,大多數計算機均支援變字長運算,即機內可實現半字長、全字長(或單字長)和雙倍字長運算。在其他指標相同時,字長越大計算機的處理資料的速度就越快。早期的微機字長一般是8位和
16 位,
386以及更高的處理器大多是
32位。目前市面上的計算機的處理器大部分已達到
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次方(即
4g,最大記憶體空間為
4gb,這裡
g表示數量、
gb表示容量
)。同時我們不難看出,乙個指標的值就是乙個
32位的二進位制數,
32位對應4位元組
(byte)
。所以,指標的大小實際上是由cpu
的定址位數決定,而不是字長。
再來分析一下如下的情況:
32位處理器上
32位作業系統的
32位編譯器,指標大小
4位元組。
32位處理器上
32位作業系統的
16位編譯器,指標大小
2位元組。
32位處理器上
16位作業系統的
16位編譯器,指標大小
2位元組。
16位處理器上
16位作業系統的
16位編譯器,指標大小
2位元組。
這從結果看起來指標的大小和編譯器有關??
實際不是這樣的,有這樣的結果是因為以上幾種情況,處理器當前執行模式的定址位數是不一樣的,如下:
intel 32
位處理器
32位執行模式,邏輯定址位數
32,指標也就是
32位,即
4個位元組
intel 32
位處理器
16位虛擬機器執行模式,邏輯定址位數
16,指標也就是
16位,即
2個位元組
編譯器的作用是根據目標硬體(即
cpu)的特性將源程式編譯為可在該硬體上執行的目標檔案。如果乙個編譯器支援某
32位的
cpu,那麼它就可以將源程式編譯為可以在該
cpu上執行的目標檔案。該源程式中指標大小也會被編譯器根據該cpu
的定址位數(如
32位)編譯選擇為
4位元組。
綜上可得:指標大小是由
當前cpu
執行模式的定址位數決定
!
指標的大小到底是由誰決定?是多少?
32位處理器上32位作業系統的16位編譯器,指標大小2位元組。32位處理器上16位作業系統的16位編譯器,指標大小2位元組。16位處理器上16位作業系統的16位編譯器,指標大小2位元組。這從結果看起來指標的大小和編譯器有關?實際不是這樣的,有這樣的結果是因為以上幾種情況,處理器當前執行模式的定址位數...
指標的大小到底是由誰決定?是多少?
整理自指標的大小到底是由誰決定?是多少?首先,介紹幾個基本概念 1 字長 在同一時間中處理二進位制數的位數叫字長。通常稱處理字長為8位資料的cpu叫8位cpu,32位cpu就是在同一時間內處理字長為32位的二進位制資料。二進位制的每乙個0或1是組成二進位制的最小單位,稱為乙個位元 bit 一般說來,...
指標的大小到底是由誰決定?是多少?
自 應該說這是乙個非常基礎的問題,教科書上說指標大小和機器字長相同,即32位機指標長度為4位元組!但是對不對呢?為什麼是這樣?搜了一下相關資料。居然發現回答不統一,很多人也同樣是糊里糊塗。下面對這個問題做乙個系統的整理和分析 字長 在同一時間中處理二進位制數的位數叫字長。通常稱處理字長為8位資料的c...