代碼揭秘-從C++的角度探秘計算機系統(tǒng)_第1頁
代碼揭秘-從C++的角度探秘計算機系統(tǒng)_第2頁
代碼揭秘-從C++的角度探秘計算機系統(tǒng)_第3頁
代碼揭秘-從C++的角度探秘計算機系統(tǒng)_第4頁
代碼揭秘-從C++的角度探秘計算機系統(tǒng)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

代碼揭秘——從C/C++的角度探秘計算機系統(tǒng)左飛著ISBN978-7-121-09310-42009年8月出版定價:56.00元16開432頁內(nèi)容簡介本書從程序設(shè)計角度出發(fā),以C/C++為描述語言,以VisualC++為形式工具,將隱藏在代碼背后的關(guān)于計算機組成原理、計算機操作系統(tǒng)等方面的機制和知識娓娓道來,不僅讓讀者知其然,更要讓讀者知其所以然。并讓這些知識再反作用于編程實踐,從而幫助讀者寫出更適合機器優(yōu)化的高質(zhì)量代碼。揭開代碼背后鮮為人知的秘密,具體說來,全書主要討論了包括計算機底層編碼、內(nèi)存與指針、計算機指令與代碼系統(tǒng)、函數(shù)調(diào)用的機制、多級存儲系統(tǒng)、線程與進程的概念以及代碼優(yōu)化等多個方面的話題。本書既可作為大專院校相關(guān)專業(yè)師生的教學(xué)參考書,也可供計算機及其相關(guān)領(lǐng)域的工程技術(shù)人員查閱之用,對于普通計算機愛好者,本書也不失為幫助他們理解計算機底層機制的一本深入淺出的計算機讀物。談?wù)劇叭绾芜x書”——代序現(xiàn)在文化產(chǎn)業(yè)蓬勃發(fā)展,圖書出版業(yè)也呈現(xiàn)百家爭鳴、百花齊放的態(tài)勢。寫書的人多了,書店里的書也多了。讀者可選擇的空間更大了,但讀者淘到一本好書的難度也大了。作者抱怨著寫本好書真難啊,讀者也對歌似的叫嚷道找到一本好書真不容易啊。在讀者正式下決心去買這本書之前,我想從一個讀者的角度來和大家談?wù)劇叭绾芜x擇一本好書”這個問題。首先讀者應(yīng)該明確的一個問題是:一本技術(shù)類或者科普類的書籍之所以存在,必然有它的道理,畢竟知識本身沒有優(yōu)劣好壞之分,只是看這些知識適不適合你。別人認(rèn)為好的書對于你來說未必好,這個階段對你作用大的書未必對你永遠都有那么大的作用。本文之前曾在筆者博客上發(fā)表過,很多網(wǎng)友都覺得此文之言較為中肯,很具參考意義。唯獨這句貌似表述“書籍沒有好壞之分,只有適不適合你”之意的句子稍稍引起了一些爭議。對此我想說的是,一方面,我的原句是“知識沒有優(yōu)劣好壞”而非“書籍沒有好壞”,所以理解上還應(yīng)對我的話做進一步的思辨。另一方面,這也是一個態(tài)度問題。盡管目前圖書市場的確存在良莠不齊的現(xiàn)象,但如果你最開始就以一種批判的態(tài)度去審視手中的書,那試問即使書中有黃金,恐怕你也都會視而不見了吧。況且買書的人是你自己,你也當(dāng)然應(yīng)該勇于為自己的行為承擔(dān)責(zé)任啊。所以我希望下面的文字能夠?qū)φ陂喿x本書的讀者有所啟迪,幫助他們擦亮眼睛,選出真正適合自己的好書。選書還是得先看看書名、前言和目錄之類的東西。我曾經(jīng)寫過一本名叫《VisualC++數(shù)字圖像處理開發(fā)入門與編程實踐》的書,有的讀者寫信夸獎?wù)f“這書挺好,內(nèi)容通俗易懂,實例豐富詳盡”;而有的讀者則批評說這書“太令人失望了,內(nèi)容太簡單,沒深度”。書名已經(jīng)點明“開發(fā)入門”,這表明這本書就是面向初學(xué)者的一本入門書,如果名叫“入門”,內(nèi)容卻諱莫如深,恐怕有點掛羊頭賣狗肉的嫌疑了吧。所以買書還是要先看好書名,看看適不適合自己。當(dāng)然,目前有些書的名字起得就有點讓人誤解。比如去年有本書叫《夢斷代碼》,這確實是一本不錯的書,不過這名字起得就太有蠱惑力了,乍看上去總以為是講程序編碼的,但其實這本書是講歷史的!所以這時,讀者就必須翻看書籍的前言和目錄了。很多讀者容易忽略前言和目錄,這顯然是不明智的。作者往往會在前言中對書籍的主要內(nèi)容、謀篇布局以及讀者對象等信息進行交代,這些信息能夠進一步幫助你確定這本書到底適不適合你??辞把赃€能獲得的一個信息是這本書的參與者有多少。這個非常重要。我就曾在書店翻到一本講編程的書,書大約有四五百頁,但是參與編寫書籍的人多達四十余位,真是不禁讓人心底發(fā)涼。連貫性對于一本書是很重要的,前后風(fēng)格不一,內(nèi)容雜糅,這種書想來就讓人頭疼。四十個廚師炒的一盤菜,這盤菜還能吃不?另外,如果你想踏踏實實地學(xué)好編程,最好不要買國內(nèi)高校的教材。原因有三。首先,國內(nèi)高校的教材往往是注重理論,里面的程序最長都不超過100行,這種書學(xué)來只能用來去考“計算機二級”之類的考試,實際的編程能力很難以這些書為基礎(chǔ)來獲得提升。其次,國內(nèi)高校的計算機教授很多都長時間不編代碼,實戰(zhàn)經(jīng)驗匱乏,難寫出緊跟技術(shù)發(fā)展又兼具實踐意義的書籍。最后,大學(xué)教授掛名編書,學(xué)生實際操刀的例子屢見不鮮,這種書難保質(zhì)量。又有可能出現(xiàn)相互抄襲的情況。例如,前不久爆出的中國工程院某院士被六名學(xué)者聯(lián)名檢舉學(xué)術(shù)腐敗的事件,其中一個事項就是院士主編的書涉嫌抄襲等問題。后來院士出面解釋說被投訴的部分都是由其他作者執(zhí)筆撰寫的,畢竟一本書涉及的內(nèi)容和方向較多,不可能所有專業(yè)都由一個人搞??梢娫凇耙蝗酥骶帲嗳藚⒕帯钡臋C制之下,書籍質(zhì)量的控制并不那么容易,院士尚且若此,其他人更可見一斑。我在寫《VisualC++數(shù)字圖像處理開發(fā)入門與編程實踐》一書時,起初翻閱了來自國內(nèi)好幾所大學(xué)不同的教授寫的書,結(jié)果發(fā)現(xiàn)好多章節(jié)嚴(yán)重雷同,某些段落竟然一致到標(biāo)點符號,真是雷死人了!除了看書名、前言和目錄,還要看看出版社和作者。這是非常重要的,有時一字之差,往往謬之千里。原來聽過一則趣聞是這樣說的,武俠小說大家金庸封筆已久,很多忠實讀者都渴望他老人家能有再次出山的那一天。后來市場上出現(xiàn)了一本赫然印著“金庸新著”的書,讀者買回去看完后不禁大呼上當(dāng),仔細琢磨才發(fā)現(xiàn)竟是作者名叫“金庸新”,而非金庸老爺爺重出江湖之“新”作。作者無疑是質(zhì)量保證的最根本要素。在IT領(lǐng)域,國內(nèi)也有很多非常優(yōu)秀的作者,通常的認(rèn)識是如果一個作者最開始就很負責(zé)任,那么他一般都會負責(zé)到底;但是如果一個作者最開始就不要臉,那他繼續(xù)無恥下去也是很正常的。此外,一些大牌出版社還是很注重自身聲譽的。出版社在對選題的把握、版面的設(shè)計以及印刷質(zhì)量控制等方面都起著至關(guān)重要的作用,所以好的出版社也是優(yōu)質(zhì)圖書的一項重要保證。上述原則僅僅是我站在一名普通讀者的角度所談的關(guān)于如何選書的一些淺見,如果能對其他讀者有所幫助和啟發(fā),我將不勝欣喜。前言算下來這本書應(yīng)該是我奉獻給讀者的第三本書了。一路寫下來,自己也感覺非常慶幸,慶幸有許多讀者如此地厚愛于我!更高興地看到廣大讀者能夠從我的書里汲取知識,獲得啟迪。在計算機圖書的創(chuàng)作過程中,我不禁感慨:寫一本好書不容易!更何況千里馬常有,而伯樂不常有,能夠讓一本書找到它真正的讀者同樣有難度。因此我寫下了后面的文字,希望這些介紹性的東西能夠幫助讀者理解本書要旨,明確所述內(nèi)容。本書緣起我想有一個問題,很多讀者都非常關(guān)心,那就是如何成為一名編程高手。這是以往很多讀者向我寫信討教的話題。關(guān)于方法學(xué)上的問題本書附錄中談了很多,這里不再贅述。但是這里我想告訴讀者的是本書能夠幫助你做些什么。通常認(rèn)為一個計算機程序設(shè)計高手應(yīng)當(dāng)具備的條件是熟練掌握至少一門計算機程序設(shè)計語言,然后有比較扎實的數(shù)據(jù)結(jié)構(gòu)與算法功底。這樣,基本上他已經(jīng)可以從一種比較高的視角來抽象現(xiàn)實問題并運用計算機來進行模擬和求解了。但是,這其實還不夠,一個高效的計算機程序需要“內(nèi)外兼修”。內(nèi)功就是程序所使用的數(shù)據(jù)結(jié)構(gòu)和算法,這是決定程序效率的根本因素;而外功就是程序編碼是否符合計算機系統(tǒng)的口味,是否能夠最大程度地調(diào)動和運用系統(tǒng)的資源。這一點的作用是不容忽視的。但是由于目前很多程序員都是半路出家,沒有接受過系統(tǒng)的計算機科學(xué)理論教育,因為他們不知道有這么回事,所以無法給予足夠的重視就無可厚非了。就像古代人們不知道有細菌和病毒的存在,所以那時也就沒有消毒的概念一樣。另外,我需要指出的是,很多計算機專業(yè)科班出身的學(xué)生也未必能夠領(lǐng)悟這項“外功”的奧義。就目前中國的計算機教育來說,學(xué)校的課程設(shè)置僅僅是將各項知識獨立地對待,這樣對于悟性不是非常高的學(xué)生來說,在沒有被點化的情況下就沒有辦法有機地將這么多課程串接起來。一個不能形成完整系統(tǒng)性的知識結(jié)構(gòu)是空洞和脆弱的結(jié)構(gòu)。國外先進的計算機教育已經(jīng)注意到了這一點,很多國外的大學(xué)都開設(shè)了這樣一門從程序設(shè)計角度來讓學(xué)生真切感受計算機組織機制和原理的課程。慶幸的是,國內(nèi)很多人也已經(jīng)意識到了這個問題,所以相關(guān)的課程和有關(guān)的書籍也在被逐步引入到國內(nèi)。但是目前存在的一個問題是,原封不動地將國外的課程和教材搬到國內(nèi)明顯讓這洋學(xué)問顯得有點“水土不服”。這種水土不服主要表現(xiàn)在三個方面。首先,這些書籍往往都是國外大學(xué)的教材,這些教材面向?qū)I(yè)學(xué)生,這無疑將廣大非專業(yè)學(xué)生和讀者拒之門外了。其次,這些書是以國外大學(xué)的情況為參照而寫作的,沒有充分考慮中國的情況——當(dāng)然,人家干嘛要考慮呀?這就讓中國讀者學(xué)起來非常不順手。比如,某些例子可能是以UNIX或者Linux下的編程為基礎(chǔ)設(shè)計的,中國絕大多數(shù)使用Windows的讀者就很難完成這些實驗。這極大地打擊了他們繼續(xù)學(xué)習(xí)的積極性和后勁。最后,引進版的書明顯要比實際技術(shù)的發(fā)展老幾代?,F(xiàn)在都是多核時代了,書里可能還在講奔騰2,這就讓中國的讀者只能在后面跟著人家跑,卻永遠沒辦法超越。核心內(nèi)容基于上面的考慮我寫了這樣一本《代碼揭秘》?;蛟S很多人對這個名字感到困惑并充滿疑問,因為直觀上好像不能確定這本書的具體內(nèi)容是什么。接下來我就要告訴讀者這本書到底是寫什么的。本書從程序設(shè)計角度出發(fā)(因為這是廣大讀者最熟悉、最容易接受的出發(fā)點),以C/C++為描述語言(因為這是目前最廣為使用的計算機語言,另外,C/C++中像指針這樣的底層特性也非常適合用來揭示系統(tǒng)深處的東西),以VisualC++為形式工具(因為它也是中國程序員所習(xí)慣使用的開發(fā)環(huán)境),將隱藏在代碼背后的關(guān)于計算機組成原理、計算機操作系統(tǒng)等方面的原理和知識娓娓道來,不僅讓讀者知其然,更要讓讀者知其所以然。并讓這些知識再反作用于編程實踐,從而幫助讀者寫出更適合機器優(yōu)化的高質(zhì)量代碼。揭開代碼背后鮮為人知的秘密,讓代碼開口說話,告訴你一個真實的計算機,從而讓你能夠?qū)懗鲞m合與計算機交流的優(yōu)秀代碼,這就是本書所能為你做到的。讀者對象接下來我要回答的問題是本書為誰而寫。如果你是一名渴望在編程技藝上有所精進的程序設(shè)計愛好者,那么這本書就是助你成為編程高手的制勝法寶;如果你是一名正苦于無法突破編程瓶頸的程序員,那么這本書就是幫你打通任督二脈的武林秘籍;如果你是一名感覺書本知識仍然無法內(nèi)化的計算機專業(yè)學(xué)生,那么本書就是替你撥云開霧、指點迷津的通天燈塔。閱讀建議最后,我還希望和讀者談?wù)勯喿x及學(xué)習(xí)本書的建議。第一,從整體上看全書共分9章,章節(jié)之間相關(guān)關(guān)聯(lián)、層層遞進,本著循序漸進的原則逐漸展開,因此閱讀本書時切不可跳躍式地選讀,這樣非但不能領(lǐng)悟整個體系間的精髓,更會為進一步的閱讀帶來困難。特別是第2~7章尤不可拆分閱讀,務(wù)必按其順序來學(xué)習(xí)。第二,為了幫助讀者理解,書中繪制了大量圖表。這些圖表的作用不可小視,如果在文字理解上遇到困難,可以參照圖表來學(xué)習(xí)。為了幫助讀者加深理解,書中還設(shè)計了大量的實驗,盡管書中給出了實驗結(jié)果,但也請讀者務(wù)必親自動手實踐一下這些例子,這樣才能讓知識凝固在你的腦中。第三,本書所涉及的知識面比較廣,在某些時候限于篇幅的考慮而未能把所有問題都展開來深入探究。對于那些并不是非常深入的知識點,如果讀者有興趣,建議讀者多多查閱有關(guān)方面的資料,這樣學(xué)習(xí)才能更加博文通識。關(guān)于本書排除前期構(gòu)思和素材準(zhǔn)備的時間,本書的寫作時長也將近有一年之久。在這個過程中,筆者力求精益求精,對很多知識點再三推敲,并翻閱了大量資料和文獻。這些工作和努力無非是希望能夠?qū)懸槐緦Φ闷鹱x者的書。在早先的兩本書出版之后,我也收到了許多熱心讀者的來信,一部分人表達了對我作品的充分肯定,這當(dāng)然是我所樂于見到的,能夠獲得來自讀者的認(rèn)可對于一個負責(zé)任的作者來說無疑是莫大的榮耀。而更多的人則向我問詢了書中的一些問題,主要是他們在閱讀過程中遇到的困難。這也是我非常高興見到的事情,因為這讓我真切地感知到確實有很多人在讀我寫的書。很多讀者同問的一個問題是如何能夠?qū)W好編程。為了回答這個問題,我特別撰寫了一篇題為《淺談編程能力的培養(yǎng)與提高》的文章附在本書正文之后,希望對那些仍處在迷茫之中的讀者能夠起到一定的幫助作用。寫一本好書真的很難,寫一本沒有錯誤的好書更是難如登天。我聞聽計算機科學(xué)大師Knuth在《計算機程序設(shè)計藝術(shù)》叢書出版后也提出如果誰能夠從他書中找到一個錯誤,就能夠獲得256美分的獎勵,事實證明獲得這項獎勵的人還是大有人在的。這也客觀地說明了即使作者很牛,即使作者很用心,書中出現(xiàn)紕漏和欠缺也的確是在所難免的事情,所以我也真心地希望廣大讀者能夠不吝賜教和批評。不過以往的經(jīng)驗著實有點讓我失望。給我寫信的讀者大有人在,但是指出我書中錯誤的讀者卻寥寥無幾。我想這其中的一個非常重要的原因在于中國的教育更多地是讓我們學(xué)會一味接受,而非大膽地思辨!我們太過盲從而迷信權(quán)威,只會聆聽高人教誨,卻不想自己思考。這對于學(xué)習(xí)來說不是一個好現(xiàn)象。古人云:盡信書則不如無書。我也希望廣大讀者能夠以思辨的態(tài)度來看書,這樣你將會獲得更多。如果在這個過程中,讀者有什么感想或者問題希望和作者交流的,歡迎給我寫信,聯(lián)系信箱:fzuo@。最后誠摯地祝愿每位讀者都能夠真正感受到編程的快樂,并在編程的路上行得更穩(wěn)健,走得更長遠!目錄第1章緒論 11.1計算機系統(tǒng)初探 21.1.1換個角度看計算機 21.1.2CPU很好很強大 41.2計算機語言與編譯技術(shù) ?81.2.1如何讓機器理解你 81.2.2編譯技術(shù)與開發(fā)環(huán)境 141.2.3程序開發(fā)流程 201.3C語言神話 221.3.1C語言的歷史 221.3.2簡單說說C語言的特點 231.4奇跡的延續(xù) 251.4.1C++的產(chǎn)生與發(fā)展 251.4.2C++與面向?qū)ο笏枷?271.5本章小結(jié) 31第2章揭開數(shù)據(jù)表示的面紗 322.1進制系統(tǒng) 332.1.1最簡單的計數(shù)方式 332.1.2計算機里只有黑白 342.1.3壓縮表示的二進制 362.2位與位操作 382.2.1計算機存儲的單位 382.2.2位操作和位段 392.3計算機中的數(shù)值 482.3.1一種最簡單的數(shù) 482.3.2現(xiàn)實世界需要負數(shù) 492.3.3只有整數(shù)還不夠 512.4讓計算機學(xué)會寫字 562.4.1ASCII碼 572.4.2漢字編碼 592.4.3更強大的編碼 602.5C語言基本數(shù)據(jù)類型 622.5.1整型 632.5.2字符型 662.5.3注意浮點數(shù)陷阱 672.6本章小結(jié) 71第3章變量與地址 723.1程序都在內(nèi)存中 733.2很多初學(xué)者都怕指針 773.3睜大眼睛看內(nèi)存 813.4數(shù)組與指針是近親 843.5再談指針 933.6本章小結(jié) 97第4章動態(tài)內(nèi)存管理 984.1malloc和free 994.2sizeof并不復(fù)雜 1014.3內(nèi)存操作函數(shù) 1054.3.1memset 1054.3.2memcpy和memmove 1074.4new和delete 1094.5內(nèi)存錯誤面面觀 1134.5.1最怕內(nèi)存泄漏 1134.5.2小心重復(fù)釋放 1154.5.3指針是個壞東西 1174.5.4超量寫內(nèi)存 1184.6使用VisualC++檢查內(nèi)存泄漏 1204.7本章小結(jié) 124第5章代碼與指令系統(tǒng) 1255.1還原代碼的本來面目 1265.1.1內(nèi)存中的代碼 1265.1.2指向函數(shù)的指針 1315.1.3CPU的存儲器 1365.1.4寄存器變量 1435.1.5寄存器組舉例 1455.2指令——簡單or復(fù)雜 1495.2.1指令格式 1495.2.2操作類型 1545.2.3操作數(shù)類型 1555.3如何找到地址 1565.3.1下一步該做什么 1565.3.2計算機知道自己需要什么 1655.4本章小結(jié) 172第6章函數(shù)與函數(shù)調(diào)用 1736.1函數(shù)與參數(shù) 1746.1.1C/C++中的函數(shù) 1746.1.2參數(shù)傳遞 1746.1.3作用域 1806.2函數(shù)的遞歸調(diào)用 1846.2.1到處都是遞歸 1846.2.2小心使用遞歸 1886.2.3遞歸與非遞歸 1946.2.4內(nèi)、外部變量分配原理 1986.3內(nèi)存的使用 2006.3.1活動記錄與棧 2006.3.2靜態(tài)分配 2036.3.3有靜就有動 2056.4程序在內(nèi)存中的模樣 2176.5本章小結(jié) 219第7章多級存儲系統(tǒng) 2217.1存儲系統(tǒng)及層級結(jié)構(gòu) 2227.1.1存儲器分類 2227.1.2存儲器的層級結(jié)構(gòu) 2257.1.3訪問的局部性原理 2277.1.4再談存儲器的層級 2317.2高速緩存 2357.2.1緩存設(shè)計策略 2357.2.2多級緩存原理 2457.2.3實際編碼指導(dǎo) 2507.3虛擬內(nèi)存 2587.3.1何為虛擬內(nèi)存 2597.3.2虛擬地址 2627.3.3頁面請求與磁盤緩沖 2697.3.4工作集合與系統(tǒng)顛簸 2747.3.5虛擬內(nèi)存與性能影響 2767.4本章小結(jié) 278第8章操作系統(tǒng)交互 2798.1多任務(wù) 2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論