1 回答

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