欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

C語言和Java大PK

2021-02-20    分類: 網(wǎng)站建設

這是一個程序員的電腦硬盤,在一個叫做“學習”的目錄下有兩個小程序,一個叫做Hello.java,另外一個叫做hello.c。
Hello.java自視甚高,有點看不起老派的hello.c,經(jīng)常叫他“C老頭”。
這hello.c也瞧不起“囂張”的java程序,也給他起了一個外號:“Java小子”。
但是這個目錄下沒有其他人,每天深夜,主人睡去以后就是無邊的黑暗和無盡的孤獨,盡管互相看不順眼,C老頭和Java小子還是得聊聊天解悶。
“C老頭兒,我聽說你們C語言在誕生的時候也是以可移植性著稱?”Java 小子率先發(fā)難,充分發(fā)揮了中國人話里有話,笑里藏刀的特點??梢浦残允荍ava最引以為傲的亮點,編寫一次,處處運行可不是說著玩的,他決定以己之長攻彼之短,先給C老頭挖個坑,等他入坑后再羞辱他一番。
“哪里哪里,我們可比不上你們Java” 沒想到C老頭竟然不跳坑,Java小子的招數(shù)被化于無形。
“那你們怎么號稱移植性好啊,難道在Windows平臺上開發(fā)的程序能運行在Linux上?” Java小子心有不甘,繼續(xù)窮追不舍。
“我們那是代碼的可移植性,不是程序的可移植性,比方說吧,像我這個hello.c可以在windows上編譯運行,也可以在Linux上編譯運行,完全不用修改代碼?!?
C語言和Java大PK
Java小子感到很吃驚,這是一次編寫到處編譯啊,好像不比自己差啊。他覺得有點沮喪,看來這一板斧砍不下去了。
可是轉(zhuǎn)念一想,hello.c只是個非常簡單的程序,像Windows、Linux上都有他的編譯器和標準程序庫,那肯定可以移植了,要是使用了系統(tǒng)平臺的接口了呢?
“你要是調(diào)用了Windows平臺的API,例如創(chuàng)建一個線程,拿到Linux上怎么辦?”
“那我們C語言就用條件編譯” C老頭早就料到Java小子會這么問。
C語言和Java大PK
“哈哈,有沒有搞錯, 這么麻煩啊,源代碼中這么多古怪的#ifdef,程序員們還不累死?!?Java小子終于抓住了把柄。
“這已經(jīng)很不錯了,在我們C語言剛剛誕生的時候,可是上個世紀70年代,根本沒有什么Java虛擬機之說,沒有什么抽象層能屏蔽底層的平臺API,可不得辛苦程序員?” C老頭說得很客觀,Java小子的囂張的氣焰消失了大半。
“那C語言怎么不與時俱進,也搞個虛擬機啊” Java 小子異想天開。
“這你就不懂了,C語言生來就是做系統(tǒng)級編程的,就是要貼近硬件,追求性能和效率,弄個虛擬機,我怎么去直接操作內(nèi)存? 和硬件交互? 對了,我們可以用指針可以直接操作內(nèi)存,效率極高,你的Java就不行了吧”
“Java當然沒有指針了,那玩意兒太容易出錯,也容易出現(xiàn)漏洞,我們的James Gosling老爹就禁止我們直接操作內(nèi)存?!?
“我們C語言一旦編譯鏈接以后,就成為一個可以獨立執(zhí)行的程序了,而你呢,只是變成一個Hello.class而已,沒有虛擬機,你都運行不了,說得難聽一點,就是一個寄生蟲啊?!?
C老頭不動聲色,開始組織反擊。
Java表示無言以對。
“還有啊,我的hello.exe一旦運行,那就是一個獨立的進程,擁有一個獨立的地址空間,被CPU獨立調(diào)度;而你的Hello.class什么都不是,Java虛擬機(java.exe)才是一個進程,Hello.class被裝載以后只能在這個進程里作為一個線程來運行,生活的空間也就是什么方法區(qū)、堆..... 這境界也差得太遠了吧”
姜還是老的辣,C老頭招招致命。
"等等,你剛才說了一個什么詞來著,鏈接?這是什么鬼東西?" Java 小子抓住了一根稻草。
“鏈接你都不懂? 真夠老土的,趕緊去看看《深入理解計算機系統(tǒng)》第7章吧。簡單來說是把一個符號和這個符號的地址給綁定起來?!?
“我只看過《深入理解Java虛擬機》 ,沒看到什么鏈接啊,你那個定義太抽象了,沒人能聽懂!”
C老頭心里鄙視了一下Java小子,所學果然淺薄,盤算著舉個例子來說明下什么是鏈接。
“你知道編譯是怎么回事嗎?” C 老頭打算另辟蹊徑給Java講講。
“那我肯定知道啊,我這個Hello.java經(jīng)過編譯以后,不就變成Hello.class了”
“我們C語言的程序,經(jīng)過預處理,編譯,匯編等步驟以后,能變成一個叫做'目標文件' 的東西”
C語言和Java大PK
“假設我這個hello.c程序又調(diào)用了cal.c中的函數(shù)add :”
hello.c :
C語言和Java大PK
cal.c :
C語言和Java大PK
“那就會生成兩個目標文件, hello.o 和 cal.o”
C語言和Java大PK
Java 小子問道:“難道你這個hello.o 不能執(zhí)行嗎? ”
“那肯定不能執(zhí)行,你看那個add函數(shù)的定義是在cal.o 這個目標文件中,我hello.o中根本就沒有??!怎么執(zhí)行? 所以編譯器只好在hello.o中記錄類似這樣的東西:hello.o中需要調(diào)用add 函數(shù),但是這個函數(shù)的實際地址不在本文件中,鏈接的時候需要找到實際地址,把它給替換掉!替換的過程就是一個重定位的過程,這一步做完了,才可以執(zhí)行。”
C語言和Java大PK
Java 小子說:“不對吧,假設我也調(diào)用了另外一個類Calculator.java 中add方法,我們倆編譯以后生成兩個class 文件,這兩個文件完全獨立,不用做鏈接,直接就可以運行啊。 ”
C語言和Java大PK
“你們肯定會做鏈接的,只不過這個鏈接不是在編譯期做的,而是在運行期做的。 等到Hello.class被裝入你的Java虛擬機運行的時候, 會發(fā)現(xiàn)有個指令要調(diào)用Calculator的add方法,這個時候就需要裝載Claculator.class,找到add方法來調(diào)用執(zhí)行。這也是一種鏈接,只不過是運行時的動態(tài)鏈接而已?!?C老頭做了一個總結(jié)陳述。
Java小子現(xiàn)在明白了C老頭說的鏈接的含義:把一個符號(add函數(shù)的名稱)和這個符號的地址(add函數(shù)的真正地址,那里有add函數(shù)的指令)給綁定起來。
“這老頭還挺厲害嘛” Java小子心里不由得對C老頭產(chǎn)生了敬意,他決定從明天開始,不再叫他C老頭了,叫他老師,向他多多請教。
眼看著天馬上亮了,兩人互道晚安。
第二天半夜,Java小子興沖沖地找C老師討教,可是hello.c已經(jīng)找不到了,同一個目錄下來了一個叫做hello.py的新家伙,他熱情地對Java小子打打招呼:“你好,我是Python,初來乍到,請多多關照?!?
“你知道hello.c去哪兒了嗎?”
“他呀, 程序員主人覺得C語言的指針太復雜了,實在是學不會,就放棄了,順便把hello.c給刪除了。 ”

當前標題:C語言和Java大PK
網(wǎng)頁路徑:http://chinadenli.net/news23/101923.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、全網(wǎng)營銷推廣網(wǎng)站內(nèi)鏈、企業(yè)建站品牌網(wǎng)站設計、電子商務

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設網(wǎng)站維護公司
精品欧美日韩一二三区| 国产91麻豆精品成人区| av中文字幕一区二区三区在线 | 中文字幕av诱惑一区二区| 免费观看日韩一级黄色大片| 少妇福利视频一区二区| 欧美黄色黑人一区二区| 成人午夜免费观看视频| 日本道播放一区二区三区| 99国产成人免费一区二区| 亚洲精选91福利在线观看| 亚洲精品熟女国产多毛| 五月婷婷欧美中文字幕 | 国产又色又爽又黄又免费| 久草精品视频精品视频精品| 91精品欧美综合在ⅹ| 免费一区二区三区少妇| 国产高清在线不卡一区| 国产又爽又猛又粗又色对黄| 91精品国产综合久久精品| 国产成人午夜av一区二区| 激情内射日本一区二区三区| 国产一区二区三区丝袜不卡| 91人妻人人揉人人澡人| 精品人妻一区二区四区| 亚洲中文字幕一区三区| 国产亚洲欧美另类久久久| 污污黄黄的成年亚洲毛片| 国产乱人伦精品一区二区三区四区| 99久久精品免费精品国产| 99热中文字幕在线精品| 99热在线精品视频观看| 亚洲一区二区亚洲日本| 人人妻人人澡人人夜夜| 一区二区三区日韩在线| 欧美小黄片在线一级观看 | 色鬼综合久久鬼色88| 中文字幕中文字幕在线十八区| 成人午夜在线视频观看| 久久夜色精品国产高清不卡| 婷婷基地五月激情五月|