<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【知其所以然】-對(duì)鏈接的思考

      引言:

      寫一段程序很容易、也能很容易的得到一個(gè)能正確運(yùn)行的執(zhí)行、學(xué)習(xí)語言很容易,難的是掌握它

      不管接觸什么語言,最經(jīng)典的入門例子大概就是“hello world”了。然而,對(duì)于“hello world”背后的東西、當(dāng)時(shí)卻不曾深究。

      作為做程序的普通小菜、我仍醉心于基礎(chǔ)和底層的東西。誠然、我也認(rèn)為這些東西很重要。練好“內(nèi)功”、有扎實(shí)的底層基礎(chǔ)才能走的更快更遠(yuǎn)。

       

      知其所以然:承上、今天看了一下關(guān)于編譯過程中鏈接的部分、覺得很有價(jià)值遂分享如下。

      由于鏈接器是從編譯器中分割出來的單獨(dú)程序,所以先要對(duì)編譯有一個(gè)基本的認(rèn)識(shí)。

       

      編譯器的基本概念:

      簡(jiǎn)單的說,一個(gè)編譯器就是一個(gè)程序,它可以閱讀某一種程序語言編寫的程序,并把改程序翻譯成一個(gè)等價(jià)的用另一種語言編寫的程序。

      絕大多數(shù)的編譯器并不是一個(gè)單一的龐大程序,通常由六七個(gè)較小的單獨(dú)的程序組成,這些程序由一個(gè)叫做“編譯器驅(qū)動(dòng)器”的控制程序

      來調(diào)用。這些單獨(dú)的程序一般包括:預(yù)處理器,語法和語義檢查器,代碼生成器,優(yōu)化器,匯編程序,鏈接器。(一段程序也正是經(jīng)過上面的那些順序而被編譯的)

       

      鏈接器

      由匯編程序產(chǎn)生的目標(biāo)文件并不能馬上執(zhí)行,而是被送入連接器生成可執(zhí)行文件。鏈接器確人main函數(shù)為程序入口點(diǎn),吧符號(hào)引用綁定到內(nèi)存地址,把所有是目標(biāo)文件

      組合在一起,再加上庫文件,從而產(chǎn)生可執(zhí)行程序。

      用于pc的鏈接機(jī)制和那些更大的系統(tǒng)有明顯區(qū)別,pc連接器只提供幾個(gè)基本的IO服務(wù),就是被稱作BIOS的程序。它們存在于內(nèi)存的固定地點(diǎn),并不是可執(zhí)行文件的一部分。

      如果需要其他功能,可以通過庫函數(shù)提供,但編譯器必須吧庫函數(shù)鏈接到每個(gè)可執(zhí)行文件中。也就是每個(gè)可執(zhí)行文件都會(huì)有一個(gè)庫函數(shù)的拷貝。

      之前的UNIX系統(tǒng)也是如此,當(dāng)鏈接程序時(shí),程序需要的每個(gè)函數(shù)都拷貝一份到執(zhí)行文件中。這就是可以說已經(jīng)用的不多的鏈接技術(shù):靜態(tài)鏈接

      表面上好像順理成章、或許善于思考的你已經(jīng)能想象出這樣做的不妥之處了吧、這里先不說,等看完了動(dòng)態(tài)鏈接就會(huì)豁然開朗的


      動(dòng)態(tài)鏈接:

      動(dòng)態(tài)鏈接是對(duì)靜態(tài)鏈接的一種優(yōu)化。動(dòng)態(tài)鏈接允許系統(tǒng)提供一個(gè)龐大的函數(shù)集合,可以提供各種各樣的服務(wù)。和靜態(tài)鏈接不同,在程序允許需要函數(shù)的

      時(shí)候從系統(tǒng)中取出直接用,而不是和靜態(tài)鏈接一樣把函數(shù)作為可執(zhí)行文件的一部分。目前大多數(shù)情況都會(huì)使用動(dòng)態(tài)鏈接。

      如果函數(shù)庫的一份拷貝是可執(zhí)行文件的物理組成部分,那么我們稱為靜態(tài)鏈接。如果可執(zhí)行文件只包含了文件名,讓載入器在運(yùn)行的時(shí)候能從系統(tǒng)中找到

      程序需要的函數(shù),那么稱為動(dòng)態(tài)鏈接。

      靜態(tài)鏈接的模塊被鏈接編輯并載入可執(zhí)行文件中一邊執(zhí)行。動(dòng)態(tài)鏈接的模塊被編輯后載入(運(yùn)行的時(shí)候不需要鏈接),并在執(zhí)行的時(shí)候鏈接(鏈接調(diào)用的庫函數(shù))一邊運(yùn)行

      (運(yùn)行時(shí)候要鏈接所調(diào)用的函數(shù))。(動(dòng)態(tài)鏈接生成的可執(zhí)行文件)執(zhí)行時(shí),在main()函數(shù)被調(diào)用之前,運(yùn)行時(shí)載入器吧共享的數(shù)據(jù)對(duì)象載入到進(jìn)程的地址空間。

      外部函數(shù)被調(diào)用之前, 運(yùn)行時(shí)載入器并不解析他們。所以即使鏈接了函數(shù)庫,如果沒有實(shí)際調(diào)用個(gè),也不會(huì)帶來額外開銷。

       

      動(dòng)態(tài)鏈接的優(yōu)點(diǎn):

      1.動(dòng)態(tài)鏈接可執(zhí)行文件比同功能的靜態(tài)鏈接文件體積小 。能節(jié)省磁盤空間和虛擬內(nèi)存

      2.所有動(dòng)態(tài)鏈接到某個(gè)特定函數(shù)庫 的可執(zhí)行文件在運(yùn)行時(shí)共享該函數(shù)庫的一個(gè)單獨(dú)拷貝。操作系統(tǒng)內(nèi)核保證映射到內(nèi)存中的函數(shù)庫可以被所有他們的進(jìn)程共享。提高了更好的

      I/O和交換空間利用率,節(jié)省物理內(nèi)存而提高系統(tǒng)的整體性能。

      3.動(dòng)態(tài)鏈接使得函數(shù)庫的版本升級(jí)更為容易。新的函數(shù)庫可隨時(shí)發(fā)布,只要更新到系統(tǒng)中就可而不用改動(dòng)程序。

       

       

      暫時(shí)就寫這些吧、歡迎補(bǔ)充、、、

      不足之處還望指正。

       

      參考資料:《C專家編程》

      《compliers》

      http://en.wikipedia.org/wiki/Compiler

      http://library.thinkquest.org/C001341/tuts/opentut.php3?mn=c&pn=t&id=21&page=1

       

       

      如轉(zhuǎn)載請(qǐng)注明出處:http://www.rzrgm.cn/yanlingyin/

      一條魚~博客園

       

      posted @ 2011-11-24 19:57  Geek_Ling  閱讀(2199)  評(píng)論(5)    收藏  舉報(bào)
      主站蜘蛛池模板: 淅川县| 亚洲 成人 无码 在线观看| 亚洲国产色一区二区三区| 四虎永久免费精品视频| 久久天天躁夜夜躁狠狠| 色偷偷久久一区二区三区| 91中文字幕一区在线| AI做受???高潮AAAA视频| 亚洲AV无码久久精品日韩| 57pao成人国产永久免费视频| 国产91丝袜在线播放动漫| 国产在线无遮挡免费观看| 国产精品亚洲中文字幕| 国产精品免费看久久久| 亚洲精品欧美综合二区| 日本国产精品第一页久久| 亚洲国产v高清在线观看| 无码精品人妻一区二区三区中 | 日本一区二区三区后入式| 亚洲综合精品第一页| 免费国产一级特黄aa大片在线| 久久久久久亚洲精品a片成人| 久久久无码精品亚洲日韩蜜臀浪潮 | 一区二区三区激情免费视频| 灵宝市| 福利一区二区视频在线| 日本中文字幕有码在线视频| 欧美一区二区三区激情| 一区二区三区午夜福利院| 久久久久成人精品免费播放动漫| 99久久无码一区人妻a黑| 好吊视频在线一区二区三区 | 精品久久久久久无码中文字幕| 国产亚洲精品中文字幕| 亚洲精品一区二区三区小| 性欧美牲交在线视频| 久久99久国产精品66| 国产自产av一区二区三区性色| 亚洲国产色一区二区三区| 精精国产xxxx视频在线 | 99中文字幕精品国产|