1 回答

TA貢獻1836條經(jīng)驗 獲得超5個贊
.NET Framework一般指Microsoft .NET Framework。
Microsoft .NET Framework是用于Windows的新托管代碼編程模型。它將強大的功能與新技術(shù)結(jié)合起來,用于構(gòu)建具有視覺上引人注目的用戶體驗的應(yīng)用程序,實現(xiàn)跨技術(shù)邊界的無縫通信,并且能支持各種業(yè)務(wù)流程。
Microsoft .NET Framework安全解決方案
.NET Framework安全解決方案基于管理代碼的概念,以及由通用語言運行時(CLR)加強的安全規(guī)則。大部分管理代碼需要進行驗證以確保類型安全及預(yù)先定義好的其它屬性的行為的安全。
例如,在驗證的代碼中,聲明為接收4字節(jié)值的訪問將拒絕提供8字節(jié)參數(shù)的調(diào)用,因為不是類型安全的。驗證過程還確保了執(zhí)行流只傳送到已知的位置,如方法入口點--這個過程去除了跳轉(zhuǎn)到任意位置執(zhí)行的能力。
驗證將阻止不是類型安全的代碼執(zhí)行,在它們引起破壞前捕獲很多常見的編程錯誤。通常的弱點--如緩存溢出,對任意內(nèi)存或沒有初始化的內(nèi)存的讀取,對控件的隨意傳送--都不再可能出現(xiàn)。這將使最終用戶受益,因為在他們執(zhí)行代碼前對其進行檢查。
這也有益于開發(fā)人員,他們會發(fā)現(xiàn)很多常見錯誤(過去一直在困繞前開發(fā))現(xiàn)在可以查明,并能阻止它們引起破壞。
擴展資料:
CLR內(nèi)存管理
內(nèi)存管理的自動化:在執(zhí)行過程中管理應(yīng)用程序的資源是一項單調(diào)而困難的工作。它會將你的注意力從你本應(yīng)解決的問題中引開。而垃圾收集機制完全解決了程序員在編程過程中頭痛的問題,跟蹤內(nèi)存的使用,并知道何時將它們釋放。
(1)為類型分配內(nèi)存。
(2)初始化內(nèi)存,設(shè)置資源的初始狀態(tài)并使其可用。
(3)通過訪問該類型的實例成員來訪問資源。
(4)卸下將被清除的資源狀態(tài)。
(5)釋放內(nèi)存。
這一看似簡單的過程在實際的編程中是產(chǎn)生錯誤的主要來源之一。更可怕的是:內(nèi)存中的錯誤往往導(dǎo)致不可預(yù)見的結(jié)果。如果你有過編程的經(jīng)驗,想想看,有多少次你的程序因為內(nèi)存訪問錯誤而崩潰?
特別是計算機存在多根內(nèi)存條時特別容易內(nèi)存報錯死機。建議升級電腦時換掉原來的內(nèi)存,不要采用加內(nèi)存的方式。
CLR要求所有的資源從可操控的堆(注:在此指一種內(nèi)存結(jié)構(gòu))中分配。當(dāng)一個進程被初始化后,CLR保留了一個未被分配的地址空間。這一區(qū)域叫做可操控堆。在堆中保持了指向下一個將被分配給對象的堆地址的指針(NEXT)。
初始狀態(tài)下,該指針是保留地址空間的基地址。一個應(yīng)用使用新的操作產(chǎn)生對象。此操作首先檢查新對象需要字節(jié)的大小是否會超出保留空間。
如果對象大小合適,指向下一個地址的指針將指向堆中的這個對象,該對象的構(gòu)造器被調(diào)用,新的操作返回對象的地址。
當(dāng)一個應(yīng)用請求建立一個對象時,地址空間可能不夠大。堆將發(fā)現(xiàn)這一點(通過將新對象的大小與NEXT指針相加,并與堆的大小進行比較),這時垃圾收集器就將被調(diào)用。在這里,CLR引入了“代”的概念。代,指堆中對象產(chǎn)生的先后。
這樣,垃圾收集器在將發(fā)生溢出時回收屬于特定的“代”的對象,而不是回收堆中的所有對象。
(6)即時編譯
在各種語言的編譯器對源代碼進行編譯之后,在CLR環(huán)境中產(chǎn)生的是中間代碼(出于兼容性與跨語言集成的考慮),其內(nèi)容雖然有效,但在轉(zhuǎn)化為本地代碼之前它本身是不可執(zhí)行的。這就是JIT編譯器需要完成的工作。
這里需要說明一個問題:為什么要即時編譯,而不是一次性的將中間代碼文件進行編譯?答案很簡單:原因在于效率。在大型的應(yīng)用中,你很少會用到程序的全部功能,這種邊執(zhí)行邊編譯的措施比一次性的完全編譯效率更高。
CLR帶有三個不同的JIT編譯器,在Windows平臺中,CLR帶有三個不同的JIT編譯器:
(1)缺省的編譯器---主編譯器,由它進行數(shù)據(jù)流分析并輸出經(jīng)過優(yōu)化的本地代碼,所有的中間代碼指令均可被它處理。
(2)PREJIT,它建立在主JIT編譯器之上。其運行方式更象一個傳統(tǒng)的編譯器:每當(dāng)一個.NET組件被安裝時它就運行。
(3)ECONOJIT,在并不充分優(yōu)化的前提下,它能夠快速完成IL代碼到本地碼的轉(zhuǎn)換,編譯速度與運行速度都非???。
為了配合編譯器的工作,在.NET SDK的安裝路徑下的/bin目錄中有一個負責(zé)管理JIT的應(yīng)用程序:jitman.exe。具體的使用參見聯(lián)機幫助。
- 1 回答
- 0 關(guān)注
- 3038 瀏覽
添加回答
舉報