簡體   English   中英

為什么C ++的64位整數擴展稱為“ long long”?

[英]Why is the 64bit integer extension of C++ called “long long”?

與其他類型不同:“ int”,“ boolean”,“ double”等。甚至是自定義類,也只有一個單詞。 它們的類型只有一個單詞,但是,只有那個整數使用兩個單詞。 怎么以及為什么會那么特別?

摘自: 通往64位的漫長道路 -John R. Mashey | 2006年10月1日-主題:系統演進

“ Algol 68 在1968年就受到啟發,並且在某些時候也被添加到GNU C中。”

摘錄: 年表:多個互鎖螺紋

  • 1964 IBM S / 360: 32位,帶24位尋址(共16 MB)的實際(核心)內存。
  • 1968年的Algol 68:作品包括長篇小說。 [ long int long以及 long long real,compl,位字節 ]
  • 1970年DEC PDP-11 / 20:16位,16位尋址(總共64 KB)。 IBM S / 370系列:虛擬內存,24位地址,但允許多個用戶地址空間。
  • ...
  • 1984年Motorola MC68020: 32位; 32位尋址。
  • 1984年C:Amdahl UTS( 32位S / 370)使用long long,特別是對於大文件指針。
  • 1984年C:凸( 64位向量微型超級計算機)對64位整數使用long long。
  • 1986年英特爾:80386,32位,與8086模式的支持。
  • ...
  • 1989年ANSI C(“ C89”):1983年開始開發ANSI X3J11。
  • 1992年SGI:推出第一批64位micro(MIPS R4000); 仍在運行32位操作系統。 64位C工作組:討論各種模型( LP64ILP64LLP64 ),幾乎沒有共識。
  • 1992年12月:投放運行64位操作系統的64位Alpha系統; LP64
  • 1994 SGI:一般IRIX 6( 三十二分之六十四操作系統; ILP32LL + LP64)的電力挑戰; 客戶購買4 GB以上的內存,即可使用。 DEC:隨DEC 7000 SMP一起提供4 GB +(可能稍早)。
  • 1995年太陽的UltraSPARC: 三十二分之六十四位硬件,32位只操作系統。 HAL計算機的SPARC64 :對C使用ILP64模型。
  • 1995年大型文件峰會:即使在32位系統(ILP32LL + LP64 )中,也將64位接口編入大於2 GB的文件。
  • 1994年Aspen組:支持C的LP64模型,以便Unix供應商保持一致。
  • 1996年HP:推出64位PA-RISC 2.0。
  • ...

結束提取。

注:標准Algol68↗ 沒有對Unicode / UTF-16,也不是很長很長 很長 ,但(方便)的燒焦的大小不被大小作為一個字節的相同要求。 有時-“傳統上”- 字符少於8位,例如6位ASCIIGOST )或7位(例如ASCII ,現在是GSM_03.38

C類型的命名方案最終似乎是從舊的Algol繼承而來的,Algol允許在intreal (它是浮點數的名稱)等類型之前添加任意數量的“ short”或“ long”前綴。 當然,它們的解釋取決於實現,並且不能保證long long long int實際上大於long int

C繼承了前綴(至少對於整數而言,奇怪的是,他們為浮點數選擇了更多的即席設置),但當時並沒有看到允許對其進行迭代的必要。 而且由於C在許多方面都比較松懈,因此在long int的情況下,它也允許刪除int本身。

隨着64位計算機的出現,打破了只需要很少的大小(因此只需要該方案中的單個前綴)的假設,並且編譯器開始long long支持long long 重新發現此方案的部分原因可能是它不需要破壞新的名稱或關鍵字。 然后C99將此類型作為標准的正式組成部分,C ++后來繼承了它。

實際上,正如我在“通往64位的漫長道路”中所寫的

“大約在1984年左右,Amdahl UTS和Convex為64位整數增加了很長的時間,前者在32位體系結構上,后者在64位二進制數據上。UTS尤其是將它用於長文件指針,這是出於相同動機。在PDP-11 Unix(1977年)中出現了很長的篇幅。Algol68在1968年出現了很長一段時間,並在某種程度上被添加到GNU C中。許多人討厭這種語法,但至少它不再使用任何保留的關鍵字。”

我不知道GCC何時添加很長時間,但是自從GCC 1.0於1987年發布以來,其他版本就更早了。

實際上,實際上,這實際上是由“漫長的道路”中所述的1992年工作組決定的。

之所以long long采用C ++和C標准,是因為GCC已經使用了很多年,盡管其固有的丑陋性,但現有的做法還是勝出了。 至於為什么海灣合作委員會選擇了這個名字,你必須要問他們。 <g>

long long區別於long ,后者通常只有4個字節(32位)。

long是修飾符,可用於許多原始類型來對其進行修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM