2013-04-05 123 views
2

此問題可能是多餘的,但我沒有找到確切的答案。C 8位16位32位編譯器之間的區別

C 8位16位32位編譯器之間的區別是什麼?

.exe文件有所不同如何通過爲同一代碼的不同編譯器生成...........

+0

這是一個理論問題,還是你有一些特定的編譯器/體系結構? – NPE 2013-04-05 06:41:58

+0

我不完全清楚,我只是想知道基本的區別。如果一些機構期望由8位編譯器生成的.exe,如amtel,我給由32位編譯器生成的.exe如GCC什麼使得區別..對不起,我真的很窮....... – krishna 2013-04-05 06:46:26

回答

3

16位編譯器將該程序編譯爲16位機器代碼,該代碼將在具有16位處理器的計算機上運行。 16位機器碼將在32位處理器上運行,但32位機器碼不會在16位處理器上運行。 32位機器碼通常比16位機器碼快。

隨着16位編譯器的類型,大小(位)如下:

short, int: 16 
long: 32 
long long: (no such type) 
pointer: 16/32 (but even 32 means only 1MB address-space on 8086) 

隨着32位編譯器的對象的大小(位)如下:

short: 16 
int, long: 32 
long long: 64 
pointer: 32 

對於64位編譯器,對象大小(以位爲單位)如下:

short: 16 
int: 32 
long: 32 or 64 (!) 
long long: 64 
pointer: 64 

[儘管上述值一般y正確,它們可能因特定操作系統而異。請檢查您的編譯器的文檔標準類型的默認大小]

以下可以解釋多一點... http://cboard.cprogramming.com/c-programming/96536-16-bit-compilar-32-bit-compilar.html

+0

雖然這是可能大部分是真的,你簡直太簡單了。我建議C11標準的第5.2.4.2.1節。 – Art 2013-04-05 07:13:57

+0

並非每個32位處理器都向後兼容某些16位指令集。而流行的16位Motorola 68000(例如用於世嘉Megadrive)則與32位代碼正向兼容。所以它不是那麼簡單。 – Fabel 2013-10-15 01:09:29

2

並非所有編譯器生成的.exe對於初學者來說,不同的平臺有不同的形式,你可以給它的代碼。

8位編譯器的目標微處理器與8位寄存器,16位和32位,也是64位。根據微處理器的不同,每個微處理器在內存和硬件的尋址方案上也經常有。

對於8/16/32/64位C編譯器中的每一個,都有許多針對不同微處理器的編譯器。每個平臺都會針對每個平臺進行各種優化。所以...

他們都完全不同。

0

還取決於處理器寄存器位。 32位編譯器可以編譯成只能在32位和64位微處理器上運行的32位機器碼。但不少於32位。