《深入理解計算機系統》系列之資訊的表示和儲存

2021-06-20 06:22:36 字數 1905 閱讀 2554

第一部分:程式結構和執行

第二章:資訊的表示和處理

2.1 資訊儲存

大多數計算機使用8位的塊,或者位元組(byte),作為最小的可定址的儲存器單位。而不是在儲存器中訪問單獨的位。

機器級程式將儲存器視為乙個非常大的位元組陣列,成為虛擬儲存器(virtual memory)。

儲存器的每個位元組都由乙個唯一的數字來標識,稱為它的位址(address)。所有可能位址的集合稱為虛擬位址空間(virtual address space)。顧名思義,這個虛擬位址空間只是

乙個展現給機器級程式的概念性印象。

給c語言初學者:c語言中指標的角色

指標是c語言的乙個重要特徵。它提供了引用資料結構(包括陣列)的元素的機制。與變數類似,指標也有兩個方面:值和型別。它的值表示某個物件的位置,而它的型別表示那個位

置上所儲存物件的型別(比如整數或者浮點數)。

在c語言中,以0x或0x開頭的數字常量被認為是十六進製制的值。字母'a'~'f'既可以大寫,也可以小寫,設定是大小寫混寫。

用十六進製制描述位模式的好處:既可以避免二進位制表示法的冗長,又可以避免十進位制表示法與位模式互相轉換的麻煩。

字:每台計算機都有乙個字長(word size),指明整數和指標資料的標稱大小(nominal size)。因為虛擬位址是以這樣的乙個子來編碼的,所以字長決定的最重要的系統引數就是

虛擬位址空間的最大大小。也就是說,對於乙個字長為w位的機器而言,虛擬位址的範圍為0 -(2的w次方-1)。程式最多訪問2的w個位元組。

今天大多數計算機的字長都是32位的,這就限定了虛擬位址空間為4gb。

c語言中數字資料型別的位元組數

c宣告             32位機器     64位機器

char                   1                   1

short int             2                   2

int                      4                   4

long int              4                   8

long long int      8                   8

char *                4                   8

float                  4                    4

double              8                    8

給c語言初學者:宣告指標

對於任何資料型別t,宣告 t *p; 表明p是乙個指標變數,指向乙個型別為t的物件。

例如:

char *p;表示乙個指標宣告為指向乙個char型別的物件。

定址和位元組順序

對於跨越多位元組的程式物件,我們必須建立兩個規則:這個物件的位址是什麼,以及在儲存器中如何排列這些位元組。在幾乎所有機器上,多位元組物件都被儲存為連續的位元組序列,物件的位址為所使用位元組中最小的位址。

例如:假設乙個型別為int的變數x的位址為0x100,也就是說,位址表示式&x的值為0x100,那麼,x的4個位元組將被儲存在儲存器的0x100,0x101,0x102,0x103位置。

給c語言初學者:使用typedef命名資料型別

c語言中的typedef宣告提供了一種給資料型別命名的方式。這能夠極大地改善**的可讀性,因為深度巢狀的型別宣告很難讀懂。

typedef的語法與宣告變數的語法十分相似。除了它使用的是型別名,而不是變數名。

例如:typedef int *int_pointer;

int_pointer ip;

將型別「int_pointer」定義為乙個指向int的指標,並且宣告乙個這種型別的變數ip。

深入理解計算機系統系列02

深入理解計算機系列02 在 深入理解計算機系統 這本書中,提出了加法逆元的思想,並且輔以乙個習題,我們知道兩數交換的最經典的演算法是三數交換,從計算機的底層實現上看,記憶體與暫存器之間的錯位交換已經是兩數交換的最快演算法了,這本書的習題也提到,上面寫出的加法逆元的兩數交換的演算法本質上並沒有實現出更...

深入理解計算機系統系列05

大多數編譯器提供編譯器驅動程式,它代表使用者在需要的時候呼叫語言處理器,編譯器,彙編器,和鏈結器。它將main.c翻譯成為乙個ascii碼檔案的中間檔案main.i,之後驅動編譯器翻譯器將其翻譯成乙個ascii組合語言檔案,main.s,之後驅動彙編器再將其翻譯成為乙個可重定位的目標檔案main.o...

深入理解計算機系統

關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...