[爆卦]Long long int是什麼?優點缺點精華區懶人包

為什麼這篇Long long int鄉民發文收入到精華區:因為在Long long int這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者cole945 (躂躂..)看板C_and_CPP標題Re: [問題] long v.s lo...


※ 引述《tropical72 (藍影)》之銘言:
: : 我用的是linux 64bit
: 簡單的說,早期是可以用 int 去判斷 cpu bit 數,
: 據悉 M$ 首度打破了這規則,它使用的是 LLP64,
: 很難想像吧!即使在 64 位元 cpu 下,sizeof(long) = sizeof(int) = 4 !!
: 所以現在用這方式去取 cpu bit 數也不是很準。

本來就不該用 sizeof(int)在判斷吧 囧
而且 gcc-x64 也是你所謂的 LP64 (sizeof(int) == 4)
並不是只有微軟這樣

: 1. 不是 64 位元電腦,跑程式就以 64 位元變數較快,一律都是跑 int 較快!
: 所以 windows 底下,在 64 位元 CPU 下,也是跑 32 bits 之 int 較快。
願聞其詳 @@?

: 2. 沒記錯的話,規格中只有規定
: sizeof(int) <= sizeof(long int) <= sizeof(long long int)
: 另 sizeof(float) = 4, sizeof(double)=8 , 這二支是固定的,
: 唯一關係為
: sizeof(long double) >= sizeof(double)
: 至於 long double / double / float 在運算速度上之差別,
: 於此便不再贅述, 因確實又要花點篇幅說明。

[6.3.1.1]
rank: long long > long > int > short > char
long double > double > float
spec只定了rank較小value range的是較大的subset [6.2.5-8]
並只定了range limit, 如果簡化成以byte-size來說的話,
[5.2.4.2 Numerical limits]
char = 1, int = short >= 2, long >= 4, long long >= 8
[6.5.3.4-3 sizeof(char) results 1]
float/double 也只是定value range 下限, 沒有說一定是4/8

基本際上這些data type怎麼實作,
會看 compiler 是跟著哪一個 ABI/convention 規範在走
這樣才能確保 compilers 間 (不同vender或不同版本) 的相容性
當然 ABI 怎麼訂, 會考慮cpu architecture

像 ARM 有 ARM EABI
在 Procedure Call Standard for the ARM Architecture 有範規
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/
IHI0042D_aapcs.pdf

gcc-x64是走
System V Application Binary Interface AMD64 Architecture
Processor Supplement 的範規
http://x86-64.org/documentation/abi.pdf

Microsoft VC 可以查 x64 Software Conventions
http://msdn.microsoft.com/en-us/library/02c56cw3.aspx


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.169.170.127
xatier:rank那裏是 >= 06/10 07:44
tropical72:謝謝補充與指正,受教了! 06/10 15:09
cole945:hi tropical72, gcc-x64 long我講錯了..你才是對的 orz 06/10 22:11

你可能也想看看

搜尋相關網站