程式編譯時生成的中間**檔案。目標檔案,一般是程式編譯後的二進位制檔案,再通過鏈結器(link.exe)和資源檔案鏈結就成可執行檔案了。obj只給出了程式的相對位址,而可執行檔案是絕對位址。[1]
這個問題不是很簡單,你只看到了檔案從源**到exe檔案這個流程中的一小部分。要詳細的深究這個問題,需要很多時間和精力。
資源鏈結很好理解,但鏈結器(link.exe)?
——鏈結器(link.exe)是鏈結.lib檔案、.obj目標檔案、.res;.lib檔案又稱之為導入庫檔案,只記錄了函式所在dll的位置。
.lib導入庫的概念:
.obj目標檔案的概念:
可見,在我們的程式語言和計算機中間多了乙個編譯器,我更形象的將它理解為我們與計算機之間的翻譯。翻譯做的事情,我必然看不懂,但它的工作成果就是obj、res、exe這些二進位制檔案;所有的翻譯,在某種程度上都存在欺騙的可能性...這是題外話,所以obj檔案是什麼?是計算機所能理解的二進位制**,是編譯成exe過程中需要的第一步、是ml.exe執行後的結果。
從表面上看.obj不能執行,但是.exe可以執行.還有他們的字尾名不同、.exe比.obj多了.lib、.res檔案;除此之外,要論述<.obj>
編譯執行和解釋執行:
這個問題是這些問題的原始問題,換句話說其他問題都是這個問題的延伸;如果抽象一下也很有意思的,編譯執行就好像是link.exe直接給了苦力一張它懂的紙條,我全部都苦力你幹什麼,幹完就完事;而解釋執行就好像給苦力陪了一台隨身攜帶的翻譯器,苦力勞作一下,翻譯器再告訴苦力下乙個命令,直到苦力將翻譯器中的所有命令都完成才罷休。
這個比喻也完美的解釋了「解釋執行能跨平台,而編譯執行卻不行」,因為後者直接給了一張紙,要麼苦力看得懂,要麼苦力看不懂,看不懂那就幹不了,這很正常(因為苦力也分種族)...而前者直接實現了「人工智慧」,苦力是**的人翻譯器就說**的話..速度的問題,也完美的解釋了,一張紙和翻譯器相比,當然前者更快...
什麼事快取
快取是cpu的一部分,它存在於cpu中 cpu訪問資料的速度非常的快,一秒鐘能夠訪問 處理十億條指令和資料 術語 cpu主頻1g 而記憶體就慢很多,快的記憶體能夠達到幾十兆就不錯了,可見兩者的速度差異是多麼的大 快取是為了解決cpu速度和記憶體速度的速度差異問題 記憶體中被cpu訪問最頻繁的資料和指...
今天 沒什麼事 這些天 都沒什麼事
久違了,可愛的小企鵝,闊別兩年多,今天終於又看到你熟悉的身影。這次安裝費時頗多,下了 兩個fc5都沒順利讀出來,索性回到redhat 9吧,瞧著都面熟。本子的空間太侷促,所以連gnome 也沒裝,只好委屈一下了,等下次撿到錢,一定換個大硬碟。想起昨晚西門雞翅大餐回來,三個人在園子裡飆車,感覺甚爽,白...
什麼是obj檔案
程式編譯時生成的中間 檔案。目標檔案,一般是程式編譯後的二進位制檔案,再通過鏈結器 link.exe 和資源檔案鏈結就成可執行檔案了。obj只給出了程式的相對位址,而可執行檔案是絕對位址。1 這個問題不是很簡單,你只看到了檔案從源 到exe檔案這個流程中的一小部分。要詳細的深究這個問題,需要很多時間...