google code-beautifer

星期五, 10月 19, 2007

現代中央處理器的C 整數長度

最近要寫一些C程式處理大筆資料,有點擔心會整數溢位。
寫了個C程式試了下,發現很有意思的事

在AMD CPU 32bit Athlon gcc 4.1.2 傳回
bytes: char:1, int:4, long:4, unsign:4, unsign long:4, long long: 8

AMD 64bit Athlon gcc 4.1.2 傳回
bytes: char:1, int:4, long:8, unsign:4, unsign long:8, long long: 8

Sun Ultra sprac III (64 bit CPU) gcc 3.4.4 傳回
bytes: char:1, int:4, long:4, unsign:4, unsign long:4, long long: 8

看起來Sun 這版gcc 還停在 32 bit

其實一般應用 32 bit signed 整數(-2,147,483,648 到 2,147,483,647)已經蠻夠了。要省空間就用 short int 或 char


short int (2)
-32,768 to 32,767
(K& R 說是 -32,767)

unsigned int (4)
0 to 4,294,967,295

int (4)
-2,147,483,648 to 2,147,483,647
(K& R 說是 -2,147,483,647)

char (1)
256 character values

float (4)
1.2e-38 to 3.4e38

double (8)
2.2e-308 to 1.8e308

1 則留言:

jserv 提到...

這與 programming model 有關,可參考:
http://blog.linux.org.tw/~jserv/archives/001639.html