計算機系統內的字長到底指的是什麼?
在看深入理解計算機操作系統這本書,書內的第二章說 字長就是指明整數和指針數據的標稱大小。
但是整數在不同的機器上會有不同的位元組大小,32位和64位機器的整數大小不同,還有編譯器不同,整數也不同,int和long也不同,那字長大小到底是什麼呢?我理解的是字長是一串數碼作為一個整體來處理或運算的單位,但是這個長度到底是多少呢?佔用二進位的bit是多少呢?
字長並非一個十分嚴格的概念。在一個 CPU 指令集中,每條指令都可以處理長度不同的操作數。這時就把大多數指令能處理的最長長度但是又不花費額外周期的操作數長度稱為字長。比如說,大多數指令都能處理 8 位,16 位,32 位數據,但是處理 32 位數據要花費更多的時鐘周期,而處理 8 位和 16 位的時間一樣,那麼就稱字長是 16 位。
其實,CPU 指令集眾多,各種例外是難免的。比如,8088 處理 16 位操作數的時候,只要不涉及主內存(只是立即數或者寄存器)就不花費額外周期,否則花費額外周期。所以稱為準 16 位。再比如,如今的支持 SSE 指令集的 CPU,所稱的字長從歷史角度考慮,根本就沒把 SSE 這種單指令多數據的情況算進去。
而且,字長還經常會從地址匯流排寬度,數據匯流排寬度這類概念借用過來。總之,說 64-bit CPU,32-bit CPU 的時候,明白自己指什麼就好,不必拘泥於字長這個概念。謝邀。
用手機回復不方便,我就簡單說一下,例子什麼的就不方便找了。
這個字長從編程語言的角度理解就沒意義了。字長要從彙編語言的角度理解,就是指令集裡面的運算和內存操作時操作數的長度。比如你寫一條load a, reg1,那麼a這個操作數的長度就是字長。32位機的字長最大是32bit,64位機的字長最大是64bit。
整型長整型浮點型之類的是編譯器關心的問題,不一定直接反應在彙編指令上。歡迎糾正
字長到底指的是什麼?
佔用二進位的bit是多少呢?
平常我們說的32位機,64位機,說的就是32字長,64字長,英文叫word size
字長越大,CPU運算能力越牛逼
4位
8位16位32位
64位,現在大部分CPU都這個水平字長:CPU一次操作可以處理的二進位比特數(0或1), 1字長 = 1 bit
舉例子
一個字長是8的cpu,一次能進行不大於1111,1111 (8位) 的運算
一個字長是16的cpu ,一次能進行不大於 1111,1111,1111,1111(16位)的運算既不是地址匯流排寬度,也不是數據匯流排寬度,字長是ALU在一個時鐘周期內(大多數)指令最多能運算的二進位位數。
我想會不會是這樣,字長就是代表CPU的單指令的最大處理長度。按照《深入理解計算機操作系統》這本書來說,字長決定了虛擬地址內存空間的大小。那麼我是這樣理解的,由於運行程序時,機器實際上去通過指針(地址)來從虛擬內存空間載入數據的,那麼計算機的單個指令必須要能夠完全處理一個指針大小的數據,否則無法找到地址啊,所以32字長的話,能夠處理的最大地址就是2^32,由於虛擬內存地址相當於位元組數組,所以最大的虛擬內存空間為2^32個位元組,同理64位機器也是如此。不知道這樣理解對不對?
推薦閱讀:
※c++學夾生了怎麼辦?
※幫忙分析一下我應該選擇的方向?
※UIUC CS 課程推薦?
※《微機原理與介面技術》和《計算機組成原理》、《計算機體系結構》三門課程有什麼區別?先後修的順序應該是怎麼樣的?研究操作系統需要學習哪門課程?
※有哪些著名的非馮諾依曼結構?
TAG:計算機科學 |