偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

GCC:優(yōu)化Linux、互聯(lián)網(wǎng)和一切

系統(tǒng) Linux
經(jīng)過數(shù)十年成千上萬人的開發(fā),GCC 成為了世界上最受尊敬的編譯器之一。如果你在構(gòu)建應(yīng)用程序是沒有使用 GCC,那么你可能錯過了最佳解決方案。

[[378391]]

 軟件如果不能被電腦運行,那么它就是無用的。而在處理運行時性能的問題上,即使是最有才華的開發(fā)人員也會受編譯器的支配 —— 因為如果沒有可靠的編譯器工具鏈,就無法構(gòu)建任何重要的東西。GNU 編譯器集合(GCC)提供了一個健壯、成熟和高性能的工具,以幫助你充分發(fā)揮你代碼的潛能。經(jīng)過數(shù)十年成千上萬人的開發(fā),GCC 成為了世界上最受尊敬的編譯器之一。如果你在構(gòu)建應(yīng)用程序是沒有使用 GCC,那么你可能錯過了最佳解決方案。

根據(jù) LLVM.org 的說法,GCC 是“如今事實上的標(biāo)準(zhǔn)開源編譯器” [1],也是用來構(gòu)建完整系統(tǒng)的基礎(chǔ) —— 從內(nèi)核開始。GCC 支持超過 60 種硬件平臺,包括 ARM、Intel、AMD、IBM POWER、SPARC、HP PA-RISC 和 IBM Z,以及各種操作環(huán)境,包括 GNU、Linux、Windows、macOS、FreeBSD、NetBSD、OpenBSD、DragonFly BSD、Solaris、AIX、HP-UX 和 RTEMS。它提供了高度兼容的 C/C++ 編譯器,并支持流行的 C 庫,如 GNU C Library(glibc)、Newlib、musl 和各種 BSD 操作系統(tǒng)中包含的 C 庫,以及 Fortran、Ada 和 GO 語言的前端。GCC 還可以作為一個交叉編譯器,可以為運行編譯器的平臺以外的其他平臺創(chuàng)建可執(zhí)行代碼。GCC 是緊密集成的 GNU 工具鏈的核心組件,由 GNU 項目產(chǎn)生,它包括 glibc、Binutils 和 GNU 調(diào)試器(GDB)。

“一直以來我最喜歡的 GNU 工具是 GCC,即 GNU 編譯器集合。在開發(fā)工具非常昂貴的時候,GCC 是第二個 GNU 工具,也是使社區(qū)能夠編寫和構(gòu)建所有其他工具的工具。這個工具一手改變了這個行業(yè),導(dǎo)致了自由軟件運動的誕生,因為一個好的、自由的編譯器是一個社區(qū)軟件的先決條件。”—— Red Hat 開源和標(biāo)準(zhǔn)團隊的 Dave Neary。[2]

優(yōu)化 Linux

作為 Linux 內(nèi)核源代碼的默認(rèn)編譯器,GCC 提供了可靠、穩(wěn)定的性能以及正確構(gòu)建內(nèi)核所需的額外擴展。GCC 是流行的 Linux 發(fā)行版的標(biāo)準(zhǔn)組件,如 ArchLinux、CentOS、Debian、Fedora、openSUSE 和 Ubuntu 這些發(fā)行版中,GCC 通常用來編譯支持系統(tǒng)的組件。這包括 Linux 使用的默認(rèn)庫(如 libc、libm、libintl、libssh、libssl、libcrypto、libexpat、libpthread 和 ncurses),這些庫依賴于 GCC 來提供可靠性和高性能,并且使應(yīng)用程序和系統(tǒng)程序可以訪問 Linux 內(nèi)核功能。發(fā)行版中包含的許多應(yīng)用程序包也是用 GCC 構(gòu)建的,例如 Python、Perl、Ruby、nginx、Apache HTTP 服務(wù)器、OpenStack、Docker 和 OpenShift。各個 Linux 發(fā)行版使用 GCC 構(gòu)建的大量代碼組成了內(nèi)核、庫和應(yīng)用程序軟件。對于 openSUSE 發(fā)行版,幾乎 100% 的原生代碼都是由 GCC 構(gòu)建的,包括 6135 個源程序包、5705 個共享庫和 38927 個可執(zhí)行文件。這相當(dāng)于每周編譯 24540 個源代碼包。[3]

Linux 發(fā)行版中包含的 GCC 的基本版本用于創(chuàng)建定義系統(tǒng)應(yīng)用程序二進(jìn)制接口(ABI)的內(nèi)核和庫。用戶空間開發(fā)者可以選擇下載 GCC 的最新穩(wěn)定版本,以獲得高級功能、性能優(yōu)化和可用性改進(jìn)。Linux 發(fā)行版提供安裝說明或預(yù)構(gòu)建的工具鏈,用于部署最新版本的 GCC 以及其他 GNU 工具,這些工具有助于提高開發(fā)人員的工作效率和縮短部署時間。

優(yōu)化互聯(lián)網(wǎng)

GCC 是嵌入式系統(tǒng)中被廣泛采用的核心編譯器之一,支持為日益增長的物聯(lián)網(wǎng)設(shè)備開發(fā)軟件。GCC 提供了許多擴展功能,使其非常適合嵌入式系統(tǒng)軟件開發(fā),包括使用編譯器的內(nèi)建函數(shù)、#語法、內(nèi)聯(lián)匯編和以應(yīng)用程序為中心的命令行選項進(jìn)行精細(xì)控制。GCC 支持廣泛的嵌入式體系結(jié)構(gòu),包括 ARM、AMCC、AVR、Blackfin、MIPS、RISC-V、Renesas Electronics V850、NXP 和 Freescale Power 處理器,可以生成高效、高質(zhì)量的代碼。GCC提供的交叉編譯能力對這個社區(qū)至關(guān)重要,而預(yù)制的交叉編譯工具鏈 [4] 是一個主要需求。例如,GNU ARM 嵌入式工具鏈?zhǔn)墙?jīng)過集成和驗證的軟件包,其中包含 ARM 嵌入式 GCC 編譯器、庫和其它裸機軟件開發(fā)所需的工具。這些工具鏈可用于在 Windows、Linux 和 macOS 主機操作系統(tǒng)上對流行的 ARM Cortex-R 和 Cortex-M 處理器進(jìn)行交叉編譯,這些處理器已裝載于數(shù)百億臺支持互聯(lián)網(wǎng)的設(shè)備中。[5]

GCC 為云計算賦能,為需要直接管理計算資源的軟件提供了可靠的開發(fā)平臺,如數(shù)據(jù)庫和 Web 服務(wù)引擎以及備份和安全軟件。GCC 完全兼容 C++ 11 和 C++ 14,為 C++ 17 和 C++ 2a 提供實驗支持 [6](LCTT 譯注:本文原文發(fā)布于 2018 年),可以創(chuàng)建性能優(yōu)異的對象代碼,并提供可靠的調(diào)試信息。使用 GCC 的應(yīng)用程序的一些例子包括:MySQL 數(shù)據(jù)庫管理系統(tǒng),它需要 Linux 的 GCC [7];Apache HTTP 服務(wù)器,它建議使用 GCC [8];Bacula,一個企業(yè)級網(wǎng)絡(luò)備份工具,它需要 GCC。[9]

優(yōu)化一切

對于高性能計算(HPC)中使用的科學(xué)代碼的研究和開發(fā),GCC 提供了成熟的 C、C++ 和 Fortran 前端,以及對 OpenMP 和 OpenACC API的支持,用于基于指令的并行編程。因為 GCC 提供了跨計算環(huán)境的可移植性,它使得代碼能夠更容易地在各種新的和傳統(tǒng)的客戶機和服務(wù)器平臺上進(jìn)行測試。GCC 為 C、C++ 和 Fortran 編譯器提供了 OpenMP 4.0 的完整支持,為 C 和 C++ 編譯器提供了 OpenMP 4.5 完整支持。對于 OpenACC、 GCC 支持大部分 2.5 規(guī)范和性能優(yōu)化,并且是唯一提供 OpenACC 支持的非商業(yè)、非學(xué)術(shù)編譯器。

代碼性能是這個社區(qū)的一個重要參數(shù),GCC 提供了一個堅實的性能基礎(chǔ)。Colfax Research 于 2017 年 11 月發(fā)表的一篇論文評估了 C++ 編譯器在使用 OpenMP 4.x 指令并行化編譯代碼的速度和編譯后代碼的運行速度。圖 1 描繪了不同編譯器編譯并使用單個線程運行時計算內(nèi)核的相對性能。性能值經(jīng)過了歸一化處理,以 G++ 的性能為 1.0。

圖 1 為由不同編譯器編譯的每個內(nèi)核的相對性能。(單線程,越高越好)。

他的論文總結(jié)道:“GNU 編譯器在我們的測試中也做得很好。G++ 在六種情況中的三種情況下生成的代碼速度是第二快的,并且在編譯時間方面是最快的編譯器之一。”[10]

誰在用 GCC?

在 JetBrains 2018 年的開發(fā)者生態(tài)狀況調(diào)查中,在接受調(diào)查的 6000 名開發(fā)者中,66% 的 C++ 程序員和 73% 的 C 程序員經(jīng)常使用 GCC。[11] 以下簡要介紹 GCC 的優(yōu)點,正是這些優(yōu)點使它在開發(fā)人員社區(qū)中如此受歡迎。

◈ 對于需要為各種新的和遺留的計算平臺和操作環(huán)境編寫代碼的開發(fā)人員,GCC 提供了對最廣泛的硬件和操作環(huán)境的支持。硬件供應(yīng)商提供的編譯器主要側(cè)重于對其產(chǎn)品的支持,而其他開源編譯器在所支持的硬件和操作系統(tǒng)方面則受到很大限制。[12]

◈ 有各種各樣的基于 GCC 的預(yù)構(gòu)建工具鏈,這對嵌入式系統(tǒng)開發(fā)人員特別有吸引力。這包括 GNU ARM 嵌入式工具鏈和 Bootlin 網(wǎng)站上提供的 138 個預(yù)編譯交叉編譯器工具鏈。[13] 雖然其他開源編譯器(如 Clang/LLVM)可以取代現(xiàn)有交叉編譯工具鏈中的 GCC,但這些工具集需要開發(fā)者完全重新構(gòu)建。[14]

◈ GCC 通過成熟的編譯器平臺向應(yīng)用程序開發(fā)人員提供可靠、穩(wěn)定的性能?!对?AMD EPYC 平臺上用 GCC 8/9 與 LLVM Clang 6/7 編譯器基準(zhǔn)測試》這篇文章提供了 49 個基準(zhǔn)測試的結(jié)果,這些測試的編譯器在三個優(yōu)化級別上運行。使用 -O3 -march=native 級別的 GCC 8.2 RC1 在 34% 的時間里排在第一位,而在相同的優(yōu)化級別 LLVM Clang 6.0 在 20% 的時間里贏得了第二位。[15]

◈ GCC 為編譯調(diào)試 [16] 提供了改進(jìn)的診斷方法,并為運行時調(diào)試提供了準(zhǔn)確而有用的信息。GCC 與 GDB 緊密集成,GDB 是一個成熟且功能齊全的工具,它提供“不間斷”調(diào)試,可以在斷點處停止單個線程。

◈ GCC 是一個得到良好支持的平臺,它有一個活躍的、有責(zé)任感的社區(qū),支持當(dāng)前版本和以前的兩個版本。由于每年都有發(fā)布計劃,這為一個版本提供了兩年的支持。

GCC:仍然在繼續(xù)優(yōu)化

GCC 作為一個世界級的編譯器繼續(xù)向前發(fā)展。GCC 的最新版本是 8.2,于 2018 年 7 月發(fā)布(LCTT 譯注:本文原文發(fā)表于 2018 年),增加了對即將推出的 Intel CPU、更多 ARM CPU 的硬件支持,并提高了 AMD 的 ZEN CPU 的性能。增加了對 C17 的初步支持,同時也對 C++2A 進(jìn)行了初步工作。診斷功能繼續(xù)得到增強,包括更好的發(fā)射診斷,改進(jìn)了定位、定位范圍和修復(fù)提示,特別是在 C++ 前端。Red Hat 的 David Malcolm 在 2018 年 3 月撰寫的博客概述了 GCC 8 中的可用性改進(jìn)。[17]

新的硬件平臺繼續(xù)依賴 GCC 工具鏈進(jìn)行軟件開發(fā),例如 RISC-V,這是一種自由開放的 ISA,機器學(xué)習(xí)、人工智能(AI)和物聯(lián)網(wǎng)細(xì)分市場都對其感興趣。GCC 仍然是 Linux 系統(tǒng)持續(xù)開發(fā)的關(guān)鍵組件。針對 Intel 架構(gòu)的 Clear Linux 項目是一個為云、客戶端和物聯(lián)網(wǎng)用例構(gòu)建的新興發(fā)行版,它提供了一個很好的示例,說明如何使用和改進(jìn) GCC 編譯器技術(shù)來提高基于 Linux 的系統(tǒng)的性能和安全性。GCC 還被用于微軟 Azure Sphere 的應(yīng)用程序開發(fā),這是一個基于 Linux 的物聯(lián)網(wǎng)應(yīng)用程序操作系統(tǒng),最初支持基于 ARM 的聯(lián)發(fā)科 MT3620 處理器。在培養(yǎng)下一代程序員方面,GCC 也是樹莓派的 Windows 工具鏈的核心組件,樹莓派是一種運行基于 Debian 的 GNU/Linux 的低成本嵌入式板,用于促進(jìn)學(xué)校和發(fā)展中國家的基礎(chǔ)計算機科學(xué)教學(xué)。

GCC 由 GNU 項目的創(chuàng)始人理查德•斯托曼首次發(fā)布 于 1987 年 3 月 22 日,由于它是第一個作為自由軟件發(fā)布的可移植的 ANSI C 優(yōu)化編譯器,因此它被認(rèn)為是一個重大突破。GCC 由來自世界各地的程序員組成的社區(qū)在指導(dǎo)委員會的指導(dǎo)下維護,以確保對項目進(jìn)行廣泛的、有代表性的監(jiān)督。GCC 的社區(qū)方法是它的優(yōu)勢之一,它形成了一個由開發(fā)人員和用戶組成的龐大而多樣化的社區(qū),他們?yōu)轫椖孔龀隽素暙I(xiàn)并提供支持。根據(jù) Open Hub 的說法,“GCC 是世界上最大的開源團隊之一,在 Open Hub 上的所有項目團隊中排名前 2%。”[18]

關(guān)于 GCC 的許可問題,人們進(jìn)行了大量的討論,其中大多數(shù)是混淆而不是啟發(fā)。GCC 在 GNU 通用公共許可證(GPL)版本 3 或更高版本下發(fā)布,但運行時庫例外。這是一個左版許可,這意味著衍生作品只能在相同的許可條款下分發(fā)。GPLv3 旨在保護 GCC,防止其成為專有軟件,并要求對 GCC 代碼的更改可以自由公開地進(jìn)行。對于“最終用戶”來說,這個編譯器與其他編譯器完全相同;使用 GCC 對你為自己的代碼所選擇的任何許可都沒有區(qū)別。[19] 

 

責(zé)任編輯:龐桂玉 來源: Linux
相關(guān)推薦

2013-09-13 16:05:51

云計算SDN

2016-12-26 11:44:58

深度學(xué)習(xí)

2021-10-12 13:52:59

量子互聯(lián)網(wǎng)網(wǎng)絡(luò)技術(shù)量子密鑰

2015-06-24 15:35:54

2015-10-28 15:18:45

2017-06-05 08:18:32

MySQL互聯(lián)網(wǎng)標(biāo)準(zhǔn)

2015-10-08 15:20:34

互聯(lián)網(wǎng)物聯(lián)網(wǎng)

2021-04-26 05:36:59

物聯(lián)網(wǎng)

2014-03-19 16:11:04

移動互聯(lián)網(wǎng)的顛覆和延伸

2015-10-30 17:50:18

互聯(lián)網(wǎng)金融

2018-08-15 09:02:59

產(chǎn)業(yè)互聯(lián)網(wǎng)工業(yè)互聯(lián)網(wǎng)物聯(lián)網(wǎng)

2015-09-22 09:17:33

互聯(lián)網(wǎng)發(fā)展史

2014-01-15 14:35:35

云計算

2015-05-28 16:11:07

互聯(lián)網(wǎng)+

2018-03-22 07:06:20

互聯(lián)網(wǎng)互聯(lián)網(wǎng)++互聯(lián)網(wǎng)

2011-12-19 16:45:22

2012-08-29 10:26:19

螞蟻互聯(lián)網(wǎng)算法

2016-12-05 13:22:15

互聯(lián)網(wǎng)移動互聯(lián)網(wǎng)物聯(lián)網(wǎng)

2019-05-24 08:54:13

2018-06-15 23:00:56

點贊
收藏

51CTO技術(shù)棧公眾號