編譯器是將一種語言翻譯為另一種語言的電腦程式。編譯器將源程式(source language) 編寫的程式作為輸入,而產生用目標語言(target language )編寫的等價程式。通常地,源程式為高階語言(high-level language ),如c或c + + ,而目標語言則是目標機器的目標** (object code,有時也稱作機器**(machine code )),也就是寫在計算機機器指令中的用於執行的**。這一過程可以表示為:
源程式→編譯器 →目標程式。
我想來談談cpu
位數與作業系統位數的問題,這二者有區別也有聯絡,作業系統位數的概念是基於
cpu的位數的。
cpu的位數是指
cpu能一次同時寄存和處理二進位制數碼的位數,這和
cpu中暫存器的位數對應。 作業系統的位數是說其所依賴的指令集的位數。計算機系統一般都應有向上相容性,所以也可有64位
cpu上執行
32位作業系統、32位
cpu上執行
16位作業系統的情況。作業系統位數應該是根據指標型別的位數來定的。整數型別不一定跟位數相等,
cpu位數準確地說應該是
cpu一次能夠並行處理的資料寬度,一般就是指資料匯流排寬度。
16位和
32位早期的主要區別是暫存器的位數,記憶體的定址和相應指令集的擴充。32位
intel cpu
都有real
模式,即完全的
16位模式,遮蔽掉
32位的所有特性;
32位模式,可以使用所有的
32位特性;模擬的
8086
模式,可以用乙個
32位機模擬多個
16位的
8086
機,他們的記憶體是分段隔離的。現在的作業系統使用的都是
32位的模式,因為可以享受到
cpu直接提供的記憶體的分頁和分段管理。他們提供模擬機制,實際上也是依託
cpu實現的
16位環境,而不是直接解釋
16位**。由於負責生成彙編**的主要是編譯器,所以設計
16位的編譯器在任何情況下只能生成
16位**。當然,這並不是說用
16位的編譯器不可能生成
32位的**,因為他完全可能被設計成在
16位實模式下生成
32位的**,從而可以在
32位的機器上被執行。這就是所謂的交叉編譯。你可以使用諸如
gcc這樣的交叉編譯器在16位
dos環境下編譯出可以在32位
linux
環境下被執行的程式。
編譯器,CPU和作業系統的巨集
編譯器gcc ifdef gnuc if gnuc 3 gcc3.0以上 visual c ifdef msc ver 非vc編譯器很多地方也有定義 if msc ver 1000 vc 4.0以上 if msc ver 1100 vc 5.0以上 if msc ver 1200 vc 6.0以上 ...
編譯器,CPU和作業系統的巨集
編譯器 gcc ifdef gnuc if gnuc 3 gcc3.0以上 visual c ifdef msc ver 非vc編譯器很多地方也有定義 if msc ver 1000 vc 4.0以上 if msc ver 1100 vc 5.0以上 if msc ver 1200 vc 6.0以上...
linux系統位數檢視和cpu位數
1.uname a如果有x86 64就是64位的,沒有就是32位的 這是64位的 uname a linux desktop 2.6.35 23 generic 37 ubuntu smp fri nov 5 19 17 11 utc 2010 i686 gnu linux 這是32位的 uname...