32位程序與64位程序區別

轉自:http://www.cnblogs.com/aHuner/p/3336028.html


32位系統由於採用了物理地址擴展技術,使得操作系統可用物理內存能夠超過4G,但對於單個程序來說,能夠使用的內存(即地址空間)還是隻有4G。GCC編譯時加上-m32參數。

64位的內存容量大大增加,從4G擴展到18PB,可以在內存中存放更多的數據,避免頻繁的磁盤讀寫IO,從而大大提高性能。也支持使用超過2G的文件。GCC編譯時加上-m64參數。

32位和64位主要的區別就在於數據模型。

表 1. 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相關數據類型以及長度一覽表:

clip_image001

 

    下面有一道面試題,不用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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章