第一部分:程式結構和執行
第二章:資訊的表示和處理
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...
深入理解計算機系統
關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...