संक्षिप्त उत्तर नहीं है।
ASLR (एक्सपी जैसे) के बिना एक प्रणाली पर, एक गैर वरीय पते पर एक DLL लोड हो रहा है कई लागत है:
- relocations अनुभाग पार्स किया जा सकता है और fixups पूरी छवि को लागू किया जा करने के लिए है ।
- फ़िक्सअप लागू करने का कार्य कॉपी-ऑन-राइट दोषों का कारण बनता है जो अपेक्षाकृत महंगे CPU-wise हैं, और पृष्ठों को डिस्क से पढ़ने के लिए मजबूर भी करते हैं, भले ही उन्हें ऐप द्वारा संदर्भित न किया जाए।
- प्रत्येक प्रक्रिया जो डीएलएल को गैर-पसंदीदा पते पर लोड करती है, उसे लिखे गए प्रत्येक पृष्ठ की एक निजी प्रति प्राप्त होती है, जिससे स्मृति उपयोग में वृद्धि होती है।
आइटम 2 और 3 अब तक की सबसे बड़ी लागत हैं, और मुख्य कारण यह है कि डीएलएल को मैन्युअल रूप से पुन: उपयोग करना आवश्यक था।
एएसएलआर के साथ, ओएस द्वारा फिक्सअप को पारदर्शी रूप से लागू किया जाता है, ऐसा लगता है कि डीएलएल वास्तव में अपने पसंदीदा पते पर लोड किया गया था। कोई कॉपी-ऑन-राइट दोष नहीं हैं, और कोई प्रक्रिया-निजी पृष्ठ नहीं बनाए जाते हैं। साथ ही, फ़िक्सअप केवल उन पृष्ठों पर लागू होते हैं जिन्हें वास्तव में पूरी छवि के बजाय ऐप द्वारा एक्सेस किया जाता है, जिसका अर्थ है डिस्क से कोई अतिरिक्त डेटा नहीं पढ़ा जाता है।
इसके अतिरिक्त, मैन्युअल रीबेसिंग स्कीम सभी बेस एड्रेस टकरावों को रोक नहीं सकती है (उदाहरण के लिए, विभिन्न विक्रेताओं के डीएलएल एक-दूसरे के साथ संघर्ष कर सकते हैं, या एक ओएस डीएलएल हॉटफिक्स के कारण आकार में बढ़ सकता है और इसमें फैल सकता है एक अन्य डीएलएल, आदि के लिए आरक्षित एक सीमा)। एएसएलआर इन मुद्दों से निपटने में बहुत अधिक कुशल है, इसलिए पूरी तरह से सिस्टम को देखते समय यह वास्तव में प्रदर्शन में सुधार कर सकता है।
स्रोत
2010-09-08 05:42:46
मुझे स्वीकार करना होगा, मुझे दिलचस्पी है। एएसएलआर ओएस से दशकों पुराने प्रदर्शन tweaks उलटा प्रतीत होता है। और मुझे पता है कि विंडोज स्टिल को बूट करने में बहुत लंबा समय लगता है। –