成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C老頭和Java小子的硬盤夜話

開發 開發工具 存儲設備
這是一個程序員的電腦硬盤, 在一個叫做“學習”的目錄下有兩個小程序, 一個叫做Hello.java , 另外一個叫做hello.c 。

[[205088]]

這是一個程序員的電腦硬盤, 在一個叫做“學習”的目錄下有兩個小程序, 一個叫做Hello.java , 另外一個叫做hello.c 。

Hello.java 自視甚高,有點看不起老派的hello.c , 經常叫他“C老頭”。

這hello.c 也瞧不起“囂張”的 java 程序, 也給他起來一個外號: “Java 小子”。

但是這個目錄下沒有其他人, 每天深夜,主人睡去以后就是無邊的黑暗和無盡的孤獨, 盡管互相看不順眼, C老頭和Java小子還是得聊聊天解悶。

“C老頭兒, 我聽說你們C語言在誕生的時候也是以可移植性著稱?” Java 小子率先發難,充分發揮了中國人話里有話,笑里藏刀的特點??梢浦残允荍ava最引以為傲的亮點, 編寫一次,處處運行可不是說著玩的, 他決定以己之長攻彼之短,先給C老頭挖個坑, 等他入坑后再羞辱他一番。

“哪里哪里, 我們可比不上你們Java ” 沒想到C老頭竟然不跳坑, Java 小子的招數被化于無形。

“那你們怎么號稱移植性好啊,難道在Windows平臺上開發的程序能運行在Linux上?” Java小子心有不甘,繼續窮追不舍。

“我們那是代碼的可移植性,不是程序的可移植性,比方說吧, 像我這個hello.c 可以在windows上編譯運行, 也可以在Linux上編譯運行, 完全不用修改代碼。 ”

Java 小子感到很吃驚, 這是一次編寫到處編譯啊, 好像不比自己差啊。 他覺得有點沮喪,看來這一板斧砍不下去了。

可是轉念一想, hello.c只是個非常簡單的程序,像Windows、Linux上都有他的編譯器和標準程序庫, 那肯定可以移植了, 要是使用了系統平臺的接口了呢?

“你要是調用了Windows平臺的API,例如創建一個線程,拿到Linux上怎么辦?”

“那我們C語言就用條件編譯” C老頭早就料到Java小子會這么問。

“哈哈,有沒有搞錯, 這么麻煩啊,源代碼中這么多古怪的#ifdef, 程序員們還不累死。 ” Java小子終于抓住了把柄。

“這已經很不錯了,在我們C語言剛剛誕生的時候, 可是上個世紀70年代, 根本沒有什么Java虛擬機之說, 沒有什么抽象層能屏蔽底層的平臺API, 可不得辛苦程序員?” C老頭說得很客觀,Java 小子的囂張的氣焰消失了大半。

“那C語言怎么不與時俱進,也搞個虛擬機啊” Java 小子異想天開。

“這你就不懂了, C語言生來就是做系統級編程的,就是要貼近硬件,追求性能和效率,弄個虛擬機,我怎么去直接操作內存? 和硬件交互? 對了,我們可以用指針可以直接操作內存,效率極高, 你的Java就不行了吧”

“Java 當然沒有指針了, 那玩意兒太容易出錯,也容易出現漏洞, 我們的James Gosling老爹就禁止我們直接操作內存。”

“我們C語言一旦編譯鏈接以后,就成為一個可以獨立執行的程序了, 而你呢,只是變成一個Hello.class 而已,沒有虛擬機, 你都運行不了, 說得難聽一點, 就是一個寄生蟲啊。” Java 老頭不動聲色,開始組織反擊。

Java 表示無言以對。

“還有啊, 我的hello.exe一旦運行, 那就是一個獨立的進程,擁有一個獨立的地址空間,被CPU獨立調度; 而你的Hello.class 什么都不是, Java虛擬機(java.exe)才是一個進程,Hello.class 被裝載以后只能在這個進程里作為一個線程來運行, 生活的空間也就是什么方法區、堆..... 這境界也差得太遠了吧”

姜還是老的辣, C老頭招招致命。

"等等, 你剛才說了一個什么詞來著,鏈接?這是什么鬼東西?" Java 小子抓住了一根稻草。

“鏈接你都不懂? 真夠老土的, 趕緊去看看《深入理解計算機系統》第7章吧。 簡單來說是把一個符號和這個符號的地址給綁定起來。”

“我只看過《深入理解Java虛擬機》 , 沒看到什么鏈接啊, 你那個定義太抽象了,沒人能聽懂!”

C老頭心里鄙視了一下Java小子,所學果然淺薄, 盤算著舉個例子來說明下什么是鏈接。

“你知道編譯是怎么回事嗎? ” C 老頭打算另辟蹊徑給Java講講。

“那我肯定知道啊, 我這個Hello.java經過編譯以后,不就變成Hello.class了”

“我們C語言的程序,經過預處理,編譯,匯編等步驟以后,能變成一個叫做'目標文件' 的東西”

“假設我這個hello.c程序又調用了cal.c中的函數add :”

hello.c :

cal.c :

“那就會生成兩個目標文件, hello.o 和 cal.o”

Java 小子問道: “難道你這個hello.o 不能執行嗎? ”

“那肯定不能執行,你看那個add函數的定義是在cal.o 這個目標文件中, 我hello.o中根本就沒有啊!怎么執行? 所以編譯器只好在hello.o 中記錄類似這樣的東西:hello.o 中需要調用add 函數,但是這個函數的實際地址不在本文件中,鏈接的時候需要找到實際地址,把它給替換掉! 替換的過程就是一個重定位的過程 , 這一步做完了,才可以執行。 ”

Java 小子說: “不對吧, 假設我也調用了另外一個類Calculator.java 中add方法, 我們倆編譯以后生成兩個class 文件,這兩個文件完全獨立, 不用做鏈接, 直接就可以運行啊。 ”

“你們肯定會做鏈接的,只不過這個鏈接不是在編譯期做的,而是在運行期做的。 等到Hello.class被裝入你的Java虛擬機運行的時候, 會發現有個指令要調用Calculator的add方法, 這個時候就需要裝載Claculator.class ,找到add方法來調用執行。 這也是一種鏈接,只不過是運行時的動態鏈接而已。” C老頭做了一個總結陳述。

Java 小子現在明白了C老頭說的鏈接的含義: 把一個符號(add函數的名稱)和這個符號的地址(add函數的真正地址,那里有add函數的指令)給綁定起來。

“這老頭還挺厲害嘛” Java小子心里不由得對C老頭產生了敬意, 他決定從明天開始,不再叫他C老頭了,叫他老師, 向他多多請教。

眼看著天馬上亮了,兩人互道晚安。

第二天半夜,Java小子興沖沖地找C老師討教, 可是hello.c已經找不到了, 同一個目錄下來了一個叫做hello.py的新家伙, 他熱情地對Java小子打打招呼: “你好,我是Python,初來乍到,請多多關照。”

“你知道hello.c去哪兒了嗎?”

“他呀, 程序員主人覺得C語言的指針太復雜了,實在是學不會,就放棄了, 順便把hello.c給刪除了。 ”

【本文為51CTO專欄作者“劉欣”的原創稿件,轉載請通過作者微信公眾號coderising獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2017-11-28 10:09:08

語言JavaGo

2017-11-28 16:31:32

硬盤PythonJava

2018-09-18 15:58:46

硬盤JVMPython

2018-07-20 09:58:17

2017-11-07 16:39:32

數據庫事務內存

2015-01-05 20:43:56

2010-07-12 11:48:05

破解iPhone 4

2018-08-17 10:22:38

監控專用硬盤

2009-08-25 11:13:28

C#獲取邏輯硬盤信息

2011-04-06 08:57:07

C++java多態

2010-01-28 14:38:36

C++和C#、Java

2014-08-26 10:38:10

linux扇區

2011-04-11 09:43:25

C++C

2010-01-08 16:52:57

C++和C#

2020-01-09 09:50:32

C++JavaPython

2009-04-03 17:04:22

FanJavaC#

2020-07-27 08:24:42

編程語言C語言Java

2009-09-07 13:02:52

Java和C#線程

2009-08-11 13:13:09

C#和Java比較

2009-08-11 14:57:11

比較C#和Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久国产精99精产国高潮 | 亚洲91精品| 国产一区二区精品自拍 | 国产精品一区二区三区在线 | 午夜av毛片 | 国产免费视频在线 | 亚洲精品久久久 | 欧美成年黄网站色视频 | 久久丝袜 | 欧洲精品在线观看 | 美国a级毛片免费视频 | 国产精品美女久久久久久免费 | 99福利视频 | 日本一区二区三区精品视频 | 久久久女女女女999久久 | 日韩免费福利视频 | 一区二区三区四区免费视频 | 黄色欧美在线 | 全部免费毛片在线播放网站 | 国产一级片免费看 | 成人国内精品久久久久一区 | 亚洲热在线视频 | 亚洲第一av| 亚洲视频一区在线观看 | 欧美视频一区二区三区 | 亚洲一区久久 | 国产在线中文字幕 | 久久精品亚洲精品国产欧美 | 97免费在线观看视频 | 国产情侣啪啪 | 国产视频精品视频 | 国产福利免费视频 | 91资源在线| 国产精品99视频 | 毛片a级 | 国产激情精品一区二区三区 | 日韩久久久一区二区 | h片在线看 | 中文在线a在线 | 偷拍自拍网址 | 国产精品久久久久久久久久免费看 |