久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

什么是 C 和 C ++ 標(biāo)準(zhǔn)庫?

 價(jià)值發(fā)現(xiàn) 2020-10-04

簡要介紹編寫C/C ++應(yīng)用程序的領(lǐng)域,標(biāo)準(zhǔn)庫的作用以及它是如何在各種操作系統(tǒng)中實(shí)現(xiàn)的,。

我已經(jīng)接觸C++一段時間了,,一開始就讓我感到疑惑的是其內(nèi)部結(jié)構(gòu):我所使用的內(nèi)核函數(shù)和類從何而來? 誰發(fā)明了它們,? 他們是打包在我系統(tǒng)中的某個地方嗎,? 是否存在一份官方的C ++手冊?

在本文中,,我將通過從C和C ++語言的本質(zhì)到實(shí)際實(shí)現(xiàn)來嘗試回答這些問題,。

C和C++是如何制訂的

當(dāng)我們談?wù)揅和C++時,實(shí)際上是指一組定義(程序)語言應(yīng)該做些什么,,如何表現(xiàn),,應(yīng)該提供哪些功能的規(guī)則。C/C++的編譯器為了處理C/C++編寫的源代碼必須跟隨著這些規(guī)則,,并生成二進(jìn)制應(yīng)用程序,。聽起來非常接近于HTML:瀏覽器遵循著一組指令,所以它們可以以明確的方式來渲染網(wǎng)頁,。

與HTML一樣,,C和C++的規(guī)則都是理論上的。國際標(biāo)準(zhǔn)化組織(ISO)的一大群人每年都會聚集幾次來討論和定義語言規(guī)則,。沒錯,,C和C++是標(biāo)準(zhǔn)化的東西。他們最終都會得到一本官方的叫標(biāo)準(zhǔn)的書,,你可以從他們的網(wǎng)站中購買,。隨著語言的發(fā)展新的papers(指官方的叫標(biāo)準(zhǔn)的書)會被發(fā)布,每一次都定義一個新的標(biāo)準(zhǔn),。這就是為什么我們會有不同的C和C++版本的原因:C99, C11, C++03, C++11, C++14等等,,數(shù)字與出版/發(fā)布年份相符,。

Tot_ziens
Tot_ziens
翻譯于 4周前
2人頂
 翻譯得不錯哦!

這些標(biāo)準(zhǔn)都市非常詳細(xì)和有技術(shù)新的文檔:我不會把它們當(dāng)作手冊,。通常會分為兩部分:

1.C/C++的功能和特性,;

2.C/C++的API--開發(fā)人員可以用于他們的C/C++程序的一個類、函數(shù)和宏的集合,。它也被稱為標(biāo)準(zhǔn)庫,。

例如,這里有個來自于C標(biāo)準(zhǔn)庫第一部分的摘選,,它定義了main函數(shù)的結(jié)構(gòu):

Main function definition in a C standard document

1.main的定義,,程序啟動時調(diào)用的函數(shù)。

這是另外一個來自與同樣標(biāo)準(zhǔn)的摘錄,,描述了CAPI的成員--fmin函數(shù):

min function definition in a C standard document

2.在math.h偷文件中定義min函數(shù),。

如你所見,幾乎沒涉及到代碼,。有人必須閱讀標(biāo)準(zhǔn)并將其轉(zhuǎn)換成計(jì)算機(jī)可以消化的東西,。這是工作于編譯器和(功能)實(shí)現(xiàn)上人們所做的:前者是一種可以讀取和處理C和c++源文件的工具,后者將標(biāo)準(zhǔn)庫轉(zhuǎn)換為代碼,。我們來深入了解一下,。。

C標(biāo)準(zhǔn)庫

C標(biāo)準(zhǔn)庫也稱為ISO C庫,,是用于完成諸如輸入/輸出處理,、字符串處理、內(nèi)存管理,、數(shù)學(xué)計(jì)算和許多其他操作系統(tǒng)服務(wù)等任務(wù)的宏、類型和函數(shù)的集合,。它是在C標(biāo)準(zhǔn)中(例如C11標(biāo)準(zhǔn))中定義的。其內(nèi)容分布在不同的頭文件中,,比如上面我所提到的math.h,。

C++標(biāo)準(zhǔn)庫

和C標(biāo)準(zhǔn)庫的概念類似,,但僅針對C ++,。C++標(biāo)準(zhǔn)庫是一組C++模板類,它提供了通用的編程數(shù)據(jù)結(jié)構(gòu)和函數(shù),,如鏈表,、堆、數(shù)組、算法,、迭代器和任何其他你可以想到的C++組件,。C ++標(biāo)準(zhǔn)庫也包含了C標(biāo)準(zhǔn)庫,并在C++標(biāo)準(zhǔn)中進(jìn)行了定義(例如C++ 11標(biāo)準(zhǔn)),。

 

實(shí)現(xiàn)C/C++標(biāo)準(zhǔn)庫

我們從這里開始討論真正的代碼了,。從事于標(biāo)準(zhǔn)庫實(shí)現(xiàn)的開發(fā)者閱讀官方的ISO規(guī)范并將其轉(zhuǎn)化為代碼。他們必須依賴其操作系統(tǒng)所提供的功能(讀/寫文件,,分配內(nèi)存,,創(chuàng)建線程,......所有這些被稱為系統(tǒng)調(diào)用),,因此每個平臺都有其自己的標(biāo)準(zhǔn)庫實(shí)現(xiàn),。 有時它是系統(tǒng)內(nèi)核的一部分,有時它是作為一個附加組件 - 編譯器 - 必須單獨(dú)下載,。

GNU/Linux版實(shí)現(xiàn)

GNU C庫,,也稱為glibc, 是C標(biāo)準(zhǔn)庫的GNU項(xiàng)目實(shí)現(xiàn)。并非所有的標(biāo)準(zhǔn)C函數(shù)都可以在glibc中找到:大多數(shù)數(shù)學(xué)函數(shù)實(shí)際上是在libm庫中實(shí)現(xiàn)的,,這是一個獨(dú)立的庫,。

截至今天,glibc是Linux上使用最廣泛的C庫,。 然而,,在90年代期間,有一段時間里,,glibc有一個競爭對手稱為Linux libc(或者簡稱libc),它是由glibc 1.x的一個分支產(chǎn)生的,。在一段時間里,,Linux libc是許多Linux發(fā)行版中的標(biāo)準(zhǔn)C庫。

經(jīng)過多年的發(fā)展,,glibc竟然比Linux libc更具優(yōu)勢,并且所有使用它的Linux發(fā)行版都切換回了glibc,。所以,,如果你在你的磁盤中找到一個名為libc.so.6的文件,請不要擔(dān)心:它是現(xiàn)代版的glibc,。為了避免與之前的Linux libc版本混淆,,版本號增加到了6(他們無法將其命名為glibc.so.6:所有Linux庫都必須以lib前綴打頭),。

另一方面,,C++標(biāo)準(zhǔn)庫的實(shí)現(xiàn)位于libstdc++或GNU標(biāo)準(zhǔn)C++庫中。這是一個正在進(jìn)行的在GNU/Linux上實(shí)現(xiàn)標(biāo)準(zhǔn)C++庫的項(xiàng)目,。一般來說,,所有常規(guī)的Linux發(fā)行版都默認(rèn)使用libstdc++。

 

Mac和iOS版實(shí)現(xiàn)

在Mac和iOS上,,C標(biāo)準(zhǔn)庫的實(shí)現(xiàn)是libSystem的一部分,,libSystem是位于/usr/lib/libSystem.dylib中的核心庫。LibSystem包含其他組件,,如數(shù)學(xué)庫,、線程庫和其他底層實(shí)用程序。

關(guān)于C++標(biāo)準(zhǔn)庫,,在OS X Mavericks(V10.9)之前的Mac上,,libstdc++是默認(rèn)選項(xiàng)。這在現(xiàn)代的基于Linux的系統(tǒng)上可以找到的同樣的實(shí)現(xiàn),。自O(shè)S X Mavericks開始,,Apple切換到使用libc++,這是LLVM項(xiàng)目——Mac官方編譯器框架——所引入的GNU libstdc++標(biāo)準(zhǔn)庫的替代,。

IOS開發(fā)者可以使用iOS SDK(軟件開發(fā)工具包)來訪問標(biāo)準(zhǔn)庫,,它是一系列允許創(chuàng)建移動應(yīng)用程序的工具。

Windows版實(shí)現(xiàn)

在Windows上,,標(biāo)準(zhǔn)庫的實(shí)現(xiàn)一直嚴(yán)格限定在Visual Studio中,,它是微軟官方的編譯器。他們通常稱之為C/C++運(yùn)行時庫(CRT),,并且它涵蓋了c/c++二者的實(shí)現(xiàn),。

在最開始,CRT被實(shí)現(xiàn)為CRTDLL.DLL庫(我猜,,當(dāng)時沒有可用的C++標(biāo)準(zhǔn)庫),。從Windows 95開始,Microsoft開始將其遷移到MSVCRT [版本號] .DLL(MSVCR20.DLL,,MSVCR70.DLL等)之上,,據(jù)推測也包含C++標(biāo)準(zhǔn)庫。在1997年左近,,他們決定將文件名簡化為MSVCRT.DLL,,這不幸導(dǎo)致了令人討厭的DLL混亂。這就是為什么從Visual Studio 7.0版開始,,他們切換回每個版本使用單獨(dú)的DLL了,。

 

Visual Studio 2015引入了深度的CRT重構(gòu),。C/C ++標(biāo)準(zhǔn)庫的實(shí)現(xiàn)遷移到一個新庫,Universal C運(yùn)行時庫 (Universal CRT或UCRT),,編譯為UCRTBASE.DLL,。 UCRT目前已經(jīng)成為Windows組之一,從Windows 10開始作為操作系統(tǒng)的一部分提供,。

Android版實(shí)現(xiàn)

Bionic是Google為其Android操作系統(tǒng)所編寫的C標(biāo)準(zhǔn)庫實(shí)現(xiàn),,它直接在底層使用。 第三方開發(fā)者可以通過Android原生開發(fā)工具包(NDK)訪問Bionic,,該工具集允許你使用C和C++代碼編寫Android應(yīng)用程序,。

 

在 C++ 端, NDK提供了很多版本的實(shí)現(xiàn):

  • libc++,從從Lollipop開始的官方安卓系統(tǒng)和現(xiàn)代Mac操作系統(tǒng)都將其作為C++標(biāo)準(zhǔn)庫使用,。從NDK發(fā)布17版本開始,,它將成為NDK中唯一可用的C++標(biāo)準(zhǔn)庫實(shí)現(xiàn);

  • gnustl,,libstdc++的別名,這兩者在GNU/linux是同一個庫,。這個庫的已被棄用,,它將在NDK發(fā)布18中刪除;

  • STLport,,由STLport項(xiàng)目編寫的C++標(biāo)準(zhǔn)庫的第三方實(shí)現(xiàn),,自2008年以來一直處于不活躍狀態(tài)。與gnustl一樣,,STLport將在NDK發(fā)布18中移除,。

我能使用不同版本的實(shí)現(xiàn)代碼來替代默認(rèn)實(shí)現(xiàn)嗎?

如果你正在使用資源非常有限的系統(tǒng),,則通常需要引用C標(biāo)準(zhǔn)庫的不同實(shí)現(xiàn),。比如,uClibc-ngmusl libcdiet libc等等,,所有這些都適用于嵌入式Linux系統(tǒng)的開發(fā),,提供更小的二進(jìn)制文件和更少的內(nèi)存占用。

C++標(biāo)準(zhǔn)庫也有不同的實(shí)現(xiàn)版本:Apache C++標(biāo)準(zhǔn)庫,,uSTL以及EASTL等等,。后面兩個實(shí)際上僅關(guān)注模板部分,而不是完整的庫,,并且他們是在速度優(yōu)先的情況下開發(fā)的,。Apache版本的庫注重的是可移植性。

 

如果我們脫離了標(biāo)準(zhǔn)庫怎么辦,?

    不使用標(biāo)準(zhǔn)庫很簡單:只要在你的程序中不引入它們的任何一個頭文件,,你的工作就完成了。然而,為了讓這個操作更有意義一些,,你需要通過一些提供的系統(tǒng)調(diào)用使用某種方法與操作系統(tǒng)互動,。就像我之前說的,這就是標(biāo)準(zhǔn)庫中的函數(shù)/方法在底層實(shí)現(xiàn)的時候所使用的,。很可能你也會不得不調(diào)用這些方法來與硬件設(shè)備交互,。
    如果對你來說這聽起來很讓人激動,有些人已經(jīng)開始在網(wǎng)上嘗試在不導(dǎo)入標(biāo)準(zhǔn)庫的情況下創(chuàng)建工作流程,。因?yàn)槟阋蕾囉谝粋€特定操作系統(tǒng)所提供的函數(shù),,這種方式會喪失可移植性。然而通過使用這種艱難的方式,,肯會讓你學(xué)到更多,,而且讓你更好的理解當(dāng)你所做的事情,即使是在使用高級庫的時候,。
    除了知識,,當(dāng)你在嵌入式操作系統(tǒng)上面工作的時候你不會想去引入標(biāo)準(zhǔn)庫:因?yàn)榇a不需要移植,在有限的內(nèi)存中每個字節(jié)都很重要,,這會讓你更加精準(zhǔn)的寫代碼,。另一個使用背景就是demoscene,在這里人們盡量有限的程序的二進(jìn)制大小中去保留高質(zhì)量的音視頻——4K仍然不是最小值:一些demoparties使用1K,,256字節(jié),,64字節(jié)或者甚至32字節(jié)來競爭。在那里不允許使用標(biāo)準(zhǔn)庫,!

 

https://www.oschina.net/translate/c-c-standard-library?lang=chs&page=1#

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多