日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

c运行库、c标准库、windows API都是什么玩意

發(fā)布時間:2025/3/15 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c运行库、c标准库、windows API都是什么玩意 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

c運行庫、c標準庫、windows API都是什么玩意

768人閱讀 評論(2) 收藏 舉報

C運行庫和C標準庫的關(guān)系

C標準庫,顧名思義既然是標準,就是由標準組織制定的。是由“美國國家標準協(xié)會(American National Standards Institute,ANSI)”為了規(guī)范C語言庫而制定的標準。在最初,各個大學各個公司使用的C語言庫都不盡相同,造成相互移植非常困難,在這個背景下,制定了這個標準。

C運行庫,是和平臺相關(guān)的,即和操作系統(tǒng)相關(guān)的。它由不同操作系統(tǒng)不同開發(fā)平臺提供不同的C運行庫。但是C運行庫的部分實現(xiàn)是基于C標準庫的,即C運行庫是各個操作系統(tǒng)各個開發(fā)工具根據(jù)自身平臺開發(fā)的庫,某種程度上,可以說C運行庫是C標準庫的一個擴展庫,只是加了很多C標準庫所沒有的與平臺相關(guān)的或者不相關(guān)的庫接口函數(shù)。舉例子如:c標準庫的strcpy函數(shù)負責字符串的拷貝,但是由于缺少對目地字符串緩沖區(qū)大小的控制,極有可能導致緩沖區(qū)溢出(大量的緩沖區(qū)溢出攻擊都是由于這種漏洞而產(chǎn)生的);相反,Windows提供了能夠?qū)崿F(xiàn)同樣功能的安全的字符串拷貝函數(shù),減少了緩沖區(qū)攻擊的可能,strcpy_s。這些函數(shù)是以c運行庫的方式提供的,當然,不同的操作系統(tǒng),c運行時庫可能不同,但是對c標準庫的支持是完全一致的,也就是說,在不同的操作系統(tǒng)上,使用同一個c標準庫的函數(shù)必然產(chǎn)生一致的結(jié)果。

C標準庫中提供的有:

l?????????? 標準輸入輸出(stdio.h)。

l?????????? 文件操作(stdio.h)。

l?????????? 字符操作(ctype.h)。

l?????????? 字符串操作(string.h)。

l?????????? 數(shù)學函數(shù)(math.h)。

l?????????? 資源管理(stdlib.h)。

l?????????? 格式轉(zhuǎn)換(stdlib.h)。

l?????????? 時間/日期(time.h)。

l?????????? 斷言(assert.h)。

l?????????? 各種類型上的常數(shù)(limits.h & float.h)。

你寫的程序可以沒有math庫,程序照樣運行,只是不能處理復雜的數(shù)學運算,不過如果沒有了C?? run-time庫,main()就不會被調(diào)用,exit()也不能被響應。因為C?? run-time?? library包含了C程序運行的最基本和最常用的函數(shù)。??

如下是C運行庫與C標準庫的關(guān)系:

一個C運行庫大致包含了如下功能:

l?????????? 啟動與退出:包括入口函數(shù)及入口函數(shù)所依賴的其他函數(shù)等。

l?????????? 標準函數(shù):由C語言標準規(guī)定的C語言標準庫所擁有的函數(shù)實現(xiàn)。(C標準庫

l?????????? I/O:I/O功能的封裝和實現(xiàn),參見上一節(jié)中I/O初始化部分。

l?????????? 堆:堆的封裝和實現(xiàn),參見上一節(jié)中堆初始化部分。

l?????????? 語言實現(xiàn):語言中一些特殊功能的實現(xiàn)。

l?????????? 調(diào)試:實現(xiàn)調(diào)試功能的代碼。

操作系統(tǒng)API和C運行庫CRT,C標準庫之間

首先,C語言要早于Windows出現(xiàn),而且C語言實際標準制定的開始時間也要早于Windows(API概念出現(xiàn)的)系統(tǒng)的開發(fā)時間。所以Windows系統(tǒng)在開發(fā)的時候是完全可以使用C語言的。目前最多的說法是用C和匯編實現(xiàn)的。那么只要用C,就可能用C標準庫。

我們假設(shè)兩種情況,一是Windows API的實現(xiàn)包含部分C標準庫函數(shù)的功能實現(xiàn),這就決定了這部分操作系統(tǒng)API的實現(xiàn)是由調(diào)用標準庫實現(xiàn)的,那么在發(fā)布時需要加入所用到的c標準庫DLL一同發(fā)布。

?二是微軟的內(nèi)核(包括API)開發(fā)是使用著一個和平臺嚴格相關(guān)的C語言的靜態(tài)的鏈接庫,這樣不必提供Dll也能開發(fā)和發(fā)行。而且必然的這個C庫是在匯編的基礎(chǔ)上實現(xiàn)的,也就是說這個庫里面的C函數(shù)都是(至少有很大比例)披著C語法的匯編代碼。

要你是微軟,你選擇哪個呢?也許是兩者兼而有之,也許是后者。

一般情況下,我們說C運行庫暗含的意思是哪種平臺哪個開發(fā)平臺的C運行庫,

CRT的實現(xiàn)是基于Windows API的,而WindowsAPI的開發(fā)也是基于C語言的,但不是或者不一定基于CRT(或者C標準庫)的。

再深一步,雖然CRT是基于操作系統(tǒng) API實現(xiàn)的,但并不代表所有的CRT封裝了操作系統(tǒng) API,如一些用戶的權(quán)限控制,操作系統(tǒng)線程創(chuàng)建等都不屬于C運行庫,于是對于這些操作我們就不得不直接調(diào)用操作系統(tǒng)API或者其他庫。

總結(jié)一下,C標準庫就是任何平臺都可以使用的基本C語言庫。而CRT除了將C標準庫加入所屬范圍外,還擴展了與平臺相關(guān)的接口庫,這些接口實現(xiàn)根據(jù)不同平臺調(diào)用不同平臺的操作系統(tǒng)API。

如下圖所示,采用C標準庫編寫的程序可以應用到windows平臺,也可以應用到linux平臺;而用CRT另外與平臺相關(guān)的庫函數(shù)編寫的應用程序不能跨平臺運行。

?而不同平臺的操作系統(tǒng)API實現(xiàn),是用C標準庫呢,還是匯編呢,這個可有,可沒有。畢竟那么多windows API只要發(fā)現(xiàn)一個調(diào)用C標準庫的了,就有了。概念理解了即可,至于微軟實現(xiàn)的時候基于何種考慮不使用C標準庫,或者使用C標準庫都有自己的考慮。那就是操作系統(tǒng)內(nèi)部的研究范圍了,等我知道了之后再確定這點。哈哈。。。。。。

總結(jié)

以上是生活随笔為你收集整理的c运行库、c标准库、windows API都是什么玩意的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。