1. linux下有沒有約定俗成的關於32位整形、64位整形的宏定義
沒有這類約定俗成的宏定義,因為Linux運行在很多不同的處理器以及平台上,這包括八位、十六位、三十二位、六十四位的嵌入式等平台,而理所當然地也要迎合不同平台的硬體指令集情況,在這種情況下,自然不可能有約定俗成的宏定義,正如樓上所說的,Linux更注重可移植性,所以這些東西,還是根據自己的需求來定義吧
2. C語言程序設計中如何輸出一個64位的整數
1、ANSI C99標准中並沒有64位整數類型。但是,許多實際的編譯器,都實現了對64位整數類型的支持。因為沒有這方面的標准,所以具體的語法描述方式略有不同,一般Windows平台,用__int64的關鍵字,而Linux平台則使用long long的描述方法。
2、有人做了測試,如下圖所示:
綜合上圖可以得出如下幾點:
a:long long定義方式可以用於gcc/g++,不受平台限制,但不能用於VC6.0。
b:__int64是Win32平台編譯器64位長整型的定義方式,不能用於Linux。
c:「%lld」用於Linux i386平台編譯器,」%I64d」用於Win32平台編譯器。
d:cout只能用於C++編譯,在VC6.0中,cout不支持64位長整型。
3、如果要使用64位的整數,盡量使用最新的編譯器,Windows平台,盡量使用VS的較新版本,Linux平台,建議將gcc/g++升級到最新版本。
3. linux32位和64位的區別
第一點設計初衷不同:
64位操作系統的設計初衷是:滿足機械設計和分析、三維動畫、視頻編輯和創作,以及科學計算和高性能計算應用程序等領域中需要大量內存和浮點性能的客戶需求。換句簡明的話說就是:它們是高科技人員使用本行業特殊軟體的運行平台。而32位操作系統是為普通用戶設計的。
第二點定址能力不同:
64位處理器的優勢還體現在系統對內存的控制上。由於地址使用的是特殊的整數,因此一個ALU(算術邏輯運算器)和寄存器可以處理更大的整數,也就是更大的地址。比如,Windows
Vistax64Edition支持多達128GB的內存和多達16TB的虛擬內存,而32位CPU和操作系統最大隻可支持4G內存
第三點要求配置不同:
64位操作系統只能安裝在64位電腦上(CPU必須是64位的)。同時需要安裝64位常用軟體以發揮64位(x64)的最佳性能。32位操作系統則可以安裝在32位(32位CPU)或64位(64位CPU)電腦上。當然,32位操作系統安裝在64位電腦上,其硬體恰似「大馬拉小車」:64位效能就會大打折扣。
第四點運算速度不同:
關於32位和64位系統的差別,那真是說來話長,這里我們首先要了解一下CPU的架構技術,通常我們可以看到在計算機硬體上會有X86和X64的標識,其實這是兩種不同的CPU硬體架構,x86代表32位操作系統
x64代表64位操作系統。那麼這個32位和64位中的「位」又是什麼意思呢?相對於32位技術而言,64位技術的這個位數指的是CPU
GPRs(General-Purpose
Registers,通用寄存器)的數據寬度為64位,64位指令集就是運行64位數據的指令,也就是說處理器一次可以運行64bit數據。舉個通俗易懂但不是特別准確的例子:32位的吞吐量是1M,而64位吞吐量是2M。即理論上64位系統性能比32位的提高1倍。
4. Linux中32位和64位數據類型長度有哪些不同
基本數據類型
可以指定int的長度:
類似的,還有uint32_t和uint64_t
其它數據類型
1,size_t:跟機器字長一樣;
2,off_t:32位機器下默認是32位長,這時無法對大於4G的文件偏移操作,這時off_t = __off_t;如果想進行大於4G的文件偏移操作,可以在程序中加入頭文件之前定義
這時off_t = __off64_t,具體定義在unistd.h中;對於64位機,默認就是64位長。
#define _FILE_OFFSET_BITS 64
3,ino_t:跟機器字長一樣。