freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

net體系結(jié)構(gòu)(編輯修改稿)

2025-07-22 07:13 本頁面
 

【文章內(nèi)容簡介】 的垃圾回收系統(tǒng)。,是因為中間語言已用來處理進程。其規(guī)則要求,第一,不能引用已有的對象,除非復(fù)制已有的引用。第二,中間語言是類型安全的語言。在這里,其含義是如果存在對對象的任何引用,該引用中就有足夠的信息來確定對象的類型。垃圾回收機制不能和諸如非托管C++的語言一起使用,因為C++允許指針自由地轉(zhuǎn)換數(shù)據(jù)類型。垃圾回收的一個重要方面是它的不確定性。換言之,不能保證什么時候會調(diào)用垃圾回收器:CLR決定需要它時,就可以調(diào)用它。但可以重寫這個過程,在代碼中調(diào)用垃圾回收器。垃圾回收過程的詳細信息可參見第13章。3. 安全性.NET很好地彌補了Windows提供的安全機制,因為它提供的安全機制是基于代碼的安全性,而Windows僅提供了基于角色的安全性?;诮巧陌踩越⒃谶\行進程的賬戶的身份基礎(chǔ)上,換言之,就是誰擁有和運行進程。另一方面,基于代碼的安全性建立在代碼實際執(zhí)行的任務(wù)和代碼的可信程度上。由于中間語言提供了強大的類型安全性,因此CLR可以在運行代碼前檢查它,以確定是否有需要的安全權(quán)限。.NET還提供了一種機制,使代碼可以在運行前,預(yù)先指定需要什么安全權(quán)限。基于代碼的安全性非常重要,原因是它降低了運行來歷不明的代碼的風(fēng)險(如代碼是從Internet上下載的)。即使代碼運行在管理員賬戶下,也有可能使用基于代碼的安全性,來確定這段代碼是否仍不能執(zhí)行管理員賬戶一般允許執(zhí)行的某些類型的操作,例如讀寫環(huán)境變量、。安全問題詳見第21章。4. 應(yīng)用程序域,它用于減少運行應(yīng)用程序的系統(tǒng)開銷,這些應(yīng)用程序需要與其他程序分離開來,但仍需要彼此通信。典型的例子是Web服務(wù)器應(yīng)用程序,它需要同時響應(yīng)許多瀏覽器請求。因此,要有許多組件實例同時響應(yīng)這些同時運行的請求。,可以讓這些實例共享同一個進程,但此時一個運行的實例就有可能導(dǎo)致整個網(wǎng)站的崩潰;也可以把這些實例孤立在不同的進程中,但這樣做會增加相關(guān)性能的系統(tǒng)開銷。到現(xiàn)在為止,孤立代碼的唯一方式是通過進程來實現(xiàn)的。在啟動一個新的應(yīng)用程序時,它會在一個進程環(huán)境內(nèi)運行。Windows通過地址空間把進程分隔開來。這樣,每個進程有4GB的虛擬內(nèi)存來存儲其數(shù)據(jù)和可執(zhí)行代碼(4GB對應(yīng)于32位系統(tǒng),64位系統(tǒng)要用更多的內(nèi)存)。Windows利用額外的間接方式把這些虛擬內(nèi)存映射到物理內(nèi)存或磁盤空間的一個特殊區(qū)域中。每個進程都會有不同的映射,虛擬地址空間塊映射的物理內(nèi)存之間不重疊,如圖12所示。一般情況下,任何進程都只能通過指定虛擬內(nèi)存中的一個地址來訪問內(nèi)存——即進程不能直接訪問物理內(nèi)存,因此一個進程不可能訪問分配給另一個進程的內(nèi)存。這樣就可以確保任何執(zhí)行出錯的代碼不會損害其地址空間以外的數(shù)據(jù)(注意在Windows 95/98上,這些保護措施不像在Windows NT/2000/XP/2003/Vista/7上那樣完備,所以理論上存在應(yīng)用程序因?qū)懭氩徽_的內(nèi)存而導(dǎo)致Windows崩潰的可能性)。進程不僅是運行代碼的實例相互隔離的一種方式,在Windows NT/2000/XP/2003/Vista/7系統(tǒng)上,它們還可以構(gòu)成分配了安全權(quán)限和許可的單元。每個進程都有自己的安全標識,明確地表示W(wǎng)indows允許該進程可以執(zhí)行的操作。進程對確保安全有很大的幫助,而它們的一大缺點是性能。許多進程常常在一起工作,因此需要相互通信。一個常見的例子是進程調(diào)用一個COM組件,而該COM組件是可執(zhí)行的,因此需要在它自己的進程上運行。在COM中使用代理時也會發(fā)生類似的情況。因為進程不能共享任何內(nèi)存,所以必須使用一個復(fù)雜的編組過程在進程之間復(fù)制數(shù)據(jù)。這對性能有非常大的影響。如果需要使組件一起工作,但不希望性能有損失,唯一的方法是使用基于DLL的組件,讓所有的組件在同一個地址空間中運行—— 其風(fēng)險是執(zhí)行出錯的組件會影響其他組件。應(yīng)用程序域(application domain)是分離組件的一種方式,它不會導(dǎo)致因在進程之間傳送數(shù)據(jù)而產(chǎn)生的性能問題。其方法是把任何一個進程分解到多個應(yīng)用程序域中。每個應(yīng)用程序域大致對應(yīng)一個應(yīng)用程序,執(zhí)行的每個線程都運行在一個具體的應(yīng)用程序域中,如圖13所示。 圖 12 圖 13如果不同的可執(zhí)行文件都運行在同一個進程空間中,顯然它們就能輕松地共享數(shù)據(jù),因為理論上它們可以直接訪問彼此的數(shù)據(jù)。雖然在理論上這是可以實現(xiàn)的,但是CLR會檢查每個正在運行的應(yīng)用程序的代碼,以確保這些代碼不脫離它自己的數(shù)據(jù)區(qū)域,保證不發(fā)生直接訪問其他進程的數(shù)據(jù)的情況。這初看起來是不可能的,不真正運行程序,如何告訴程序要做什么工作?實際上,這么做通常是可能的,因為中間語言擁有強大的類型安全功能。在大多數(shù)情況下,除非代碼明確使用不安全的特性,例如指針,否則它使用的數(shù)據(jù)類型可以確保內(nèi)存不會被錯誤地訪問。例如,.NET數(shù)組類型執(zhí)行邊界檢查,以確保禁止執(zhí)行超出邊界的數(shù)組操作。如果運行的應(yīng)用程序的確需要與運行在不同應(yīng)用程序域中的其他應(yīng)用程序通信或共享數(shù)據(jù)。被驗證不能訪問超出其應(yīng)用程序域的數(shù)據(jù)(而不是通過明確的遠程處理機制)的代碼就是內(nèi)存類型安全的代碼。這種代碼與運行在同一個進程中但應(yīng)用程序域不同的類型安全代碼一起運行是安全的。 通過異常處理錯誤.NET Framework可以與Java和C++使用相同的基于異常的機制處理錯誤情況。C++開發(fā)人員應(yīng)注意到,由于IL有非常強大的類型系統(tǒng),因此在IL中不像C++那樣存在因使用異常帶來的相關(guān)性能問題。另外,.NET和C也支持finally塊,這是許多C++開發(fā)人員長久以來的愿望。第15章會詳細討論異常。簡要地說,代碼的某些領(lǐng)域被看作是異常處理例程,每個例程都能處理某種特殊的錯誤情況(例如,找不到文件,或拒絕執(zhí)行某些操作)。這些條件可以定義得很寬或很窄。異常結(jié)構(gòu)確保在發(fā)生錯誤情況時,執(zhí)行進程立即跳到最有針對性的異常處理例程上,來處理錯誤情況。異常處理的結(jié)構(gòu)還提供了一種簡便的方式,可以將包含異常情況的準確信息的對象傳遞給錯誤處理例程。這個對象包括給用戶提供的相應(yīng)信息和在代碼的什么地方檢測到錯誤的確切信息。大多數(shù)異常處理結(jié)構(gòu),包括異常發(fā)生時的程序流控制,都是由高級語言處理的,例如C、Visual Basic 2010和C++,任何中間語言中的命令都不支持它。例如,C使用try{}、catch{}和 finally{}代碼塊來處理它,詳見第15章。,語言的互操作性則允許異常處理代碼解釋被拋出的異常對象,無論異常處理代碼使用什么語言編寫,都是這樣。語言的無關(guān)性沒有體現(xiàn)在C++和Java的異常處理中,但在COM的錯誤處理機制中有一定限度的體現(xiàn)。COM的錯誤處理機制包括從方法中返回錯誤代碼以及傳遞錯誤對象。在不同的語言中,異常的處理是一致的,這是促進多語言開發(fā)的重要一環(huán)。 特性的使用特性(attribute)是使用C++編寫COM組件的開發(fā)人員很熟悉的一個功能(在Microsoft的COM接口定義語言(Interface Definition Language,IDL)中使用特性)。特性最初是為了在程序中提供與某些項相關(guān)的額外信息,以供編譯器使用。.NET支持特性,因此現(xiàn)在C++、C和Visual Basic 2010也支持特性。,對特性的革新是可以在源代碼中定義自己的自定義特性。這些用戶定義的特性將和對應(yīng)數(shù)據(jù)類型或方法的元數(shù)據(jù)放在一起,這對于文檔記錄十分有用,它們和反射技術(shù)一起使用,以根據(jù)特性執(zhí)行編程任務(wù)。另外,特性也可以在一種語言的源代碼中定義,而被用另一種語言編寫的代碼讀取。第14章將詳細介紹特性。 程序集程序集(assembly)是包含編譯好的、 Framework的代碼的邏輯單元。本章不詳細論述程序集,而在第18章中論述,下面概述其中的要點。程序集是完全自描述性的,它是一個邏輯單元而不是物理單元,可以存儲在多個文件中(動態(tài)程序集的確存儲在內(nèi)存中,而不是存儲在文件中)。如果一個程序集存儲在多個文件中,其中就會有一個包含入口點的主文件,該文件描述了程序集中的其他文件。注意可執(zhí)行代碼和庫代碼使用相同的程序集結(jié)構(gòu)。唯一的區(qū)別是可執(zhí)行的程序集包含一個主程序入口點,而庫程序集不包含。程序集的一個重要特性是它們包含的元數(shù)據(jù)描述了對應(yīng)代碼中定義的類型和方法。程序集也包含描述程序集本身的元數(shù)據(jù),這種程序集元數(shù)據(jù)包含在一個稱為“清單(manifest)”的區(qū)域中,可以檢查程序集的版本及其完整性。ildasm是一個基于Windows的實用程序,可以用于檢查程序集的內(nèi)容,包括程序集清單和元數(shù)據(jù)。第18章將介紹ildasm。程序集包含程序的元數(shù)據(jù),表示調(diào)用給定程序集中的代碼的應(yīng)用程序或其他程序集不需要引用注冊表或其他數(shù)據(jù)源,就能確定如何使用該程序集。這與以前的COM有很大的區(qū)別,以前,組件和接口的GUID必須從注冊表中獲取,在某些情況下,方法和屬性的詳細信息也需要從類型庫中讀取。把數(shù)據(jù)分散在3個以上的不同位置上,可能會出現(xiàn)信息不同步的情況,從而妨礙其他軟件成功地使用該組件。有了程序集后,就不會發(fā)生這種情況,因為所有的元數(shù)據(jù)都與程序的可執(zhí)行指令存儲在一起。注意,即使程序集存儲在幾個文件中,數(shù)據(jù)也不會出現(xiàn)不同步的問題。這是因為包含程序集入口的文件也存儲了其他文件的細節(jié)、散列和內(nèi)容,如果一個文件被替換,或者被篡改,系統(tǒng)肯定會檢測出來,并拒絕加載程序集。程序集有兩種類型:私有程序集和共享程序集。 私有程序集私有程序集是最簡單的一種程序集類型。
點擊復(fù)制文檔內(nèi)容
職業(yè)教育相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1