轉自:http://www.cnblogs.com/aHuner/p/3336028.html
32位系統由於採用了物理地址擴展技術,使得操作系統可用物理內存能夠超過4G,但對於單個程序來說,能夠使用的內存(即地址空間)還是隻有4G。GCC編譯時加上-m32參數。
64位的內存容量大大增加,從4G擴展到18PB,可以在內存中存放更多的數據,避免頻繁的磁盤讀寫IO,從而大大提高性能。也支持使用超過2G的文件。GCC編譯時加上-m64參數。
32位和64位主要的區別就在於數據模型。
類型 |
ILP32 |
LP64 |
LLP64 |
ILP64 |
char |
8 |
8 |
8 |
8 |
short |
16 |
16 |
16 |
16 |
int |
32 |
32 |
32 |
64 |
long |
32 |
64 |
32 |
64 |
long long |
64 |
64 |
64 |
64 |
指針 |
32 |
64 |
64 |
64 |
RHEL5相關數據類型以及長度一覽表:
下面有一道面試題,不用sizeof判斷系統是32位還是64位?
答:
不管數據模型怎麼樣,但32和64最重要的區別就在於指針數據長度,32位是4字節,64位是8字節,所以根據這一根本的特性可以做這道題目。
int getsystembit()
{
char buf[17];
char * p = (char *)0;
sprintf(buf,"%p",p);
int systembit = strlen(buf)*4;
return systembit;
}
參考:
將 Linux 應用程序移植到 64 位系統上:
http://www.ibm.com/developerworks/cn/linux/l-port64.html
64位編程的33條軍規:
http://wenku.baidu.com/view/7ecc8743336c1eb91a375dc5.html
linux GCC 64位編程技巧:
http://blog.csdn.net/yunhua_lee/article/details/5947173