2010-09-01 20 views
5

एमएसवीसी में, बेस एड्रेस रैंडीज़ैटन एक डिफ़ॉल्ट विकल्प है। (वीएस2005 के बाद से?)क्या एएसएलआर डीएलएस की धीमी लोडिंग का कारण बनता है?

तो, मैं मैन्युअल रूप से डीएलएल के मूल पते को मैन्युअल रूप से रीबेस नहीं करता हूं।

लेकिन जब मैंने वीएस2003 का उपयोग किया तो लोडिंग प्रदर्शन में सुधार के लिए मैंने अपने सभी डीएलएस को दोबारा दबा दिया।

यदि मैं एएसएलआर विकल्प का उपयोग करता हूं, तो लोडिंग प्रदर्शन हमेशा कम हो जाता है?
(cource के मुझे अन्य लाभ मिल सकते हैं)

+0

मुझे स्वीकार करना होगा, मुझे दिलचस्पी है। एएसएलआर ओएस से दशकों पुराने प्रदर्शन tweaks उलटा प्रतीत होता है। और मुझे पता है कि विंडोज स्टिल को बूट करने में बहुत लंबा समय लगता है। –

उत्तर

8

संक्षिप्त उत्तर नहीं है।

ASLR (एक्सपी जैसे) के बिना एक प्रणाली पर, एक गैर वरीय पते पर एक DLL लोड हो रहा है कई लागत है:

  1. relocations अनुभाग पार्स किया जा सकता है और fixups पूरी छवि को लागू किया जा करने के लिए है ।
  2. फ़िक्सअप लागू करने का कार्य कॉपी-ऑन-राइट दोषों का कारण बनता है जो अपेक्षाकृत महंगे CPU-wise हैं, और पृष्ठों को डिस्क से पढ़ने के लिए मजबूर भी करते हैं, भले ही उन्हें ऐप द्वारा संदर्भित न किया जाए।
  3. प्रत्येक प्रक्रिया जो डीएलएल को गैर-पसंदीदा पते पर लोड करती है, उसे लिखे गए प्रत्येक पृष्ठ की एक निजी प्रति प्राप्त होती है, जिससे स्मृति उपयोग में वृद्धि होती है।

आइटम 2 और 3 अब तक की सबसे बड़ी लागत हैं, और मुख्य कारण यह है कि डीएलएल को मैन्युअल रूप से पुन: उपयोग करना आवश्यक था।

एएसएलआर के साथ, ओएस द्वारा फिक्सअप को पारदर्शी रूप से लागू किया जाता है, ऐसा लगता है कि डीएलएल वास्तव में अपने पसंदीदा पते पर लोड किया गया था। कोई कॉपी-ऑन-राइट दोष नहीं हैं, और कोई प्रक्रिया-निजी पृष्ठ नहीं बनाए जाते हैं। साथ ही, फ़िक्सअप केवल उन पृष्ठों पर लागू होते हैं जिन्हें वास्तव में पूरी छवि के बजाय ऐप द्वारा एक्सेस किया जाता है, जिसका अर्थ है डिस्क से कोई अतिरिक्त डेटा नहीं पढ़ा जाता है।

इसके अतिरिक्त, मैन्युअल रीबेसिंग स्कीम सभी बेस एड्रेस टकरावों को रोक नहीं सकती है (उदाहरण के लिए, विभिन्न विक्रेताओं के डीएलएल एक-दूसरे के साथ संघर्ष कर सकते हैं, या एक ओएस डीएलएल हॉटफिक्स के कारण आकार में बढ़ सकता है और इसमें फैल सकता है एक अन्य डीएलएल, आदि के लिए आरक्षित एक सीमा)। एएसएलआर इन मुद्दों से निपटने में बहुत अधिक कुशल है, इसलिए पूरी तरह से सिस्टम को देखते समय यह वास्तव में प्रदर्शन में सुधार कर सकता है।

+0

मैंने पहले पैकर/अनपैकर लिखा है, और आपके अंक 1,2,3 सही हैं क्योंकि आपको स्थानांतरण तालिका चलनी है और सभी फ़िक्सअप मैन्युअल रूप से असेंबली प्रोग्राम में लागू करना है। लेकिन मुझे लगता है कि जब एक प्रक्रिया एक और कांटा, शुरुआत में वे एक ही pagetable साझा किया, जब तक गाय तंत्र उन्हें अलग करने के लिए मजबूर नहीं करता (एएसएलआर के मामले में) और इस प्रकार डुबकीकरण pagetable की जरूरत है। और इसका मतलब यह भी है कि एमएमयू पृष्ठ अनुवाद करते समय अतिरिक्त टीएलबी प्रविष्टियां (कभी-कभी टीएलबी कैश फ्लशिंग) भी बनाते हैं। इस वजह से प्रदर्शन भुगतना होगा? –

+5

@ पावेल: आप इस जानकारी से कहां आए? मुझे विंडोज़ पर एएसएलआर के प्रदर्शन प्रभावों को पढ़ने में दिलचस्पी है। यहां आपके उत्तर के अलावा, मेरी खोजों ने बहुत कम उत्पादन किया है। – mcmcc

+0

मैंने कभी नहीं पढ़ा है कि एएसएलआर "फिक्सअप ओएस द्वारा trasnparently लागू होते हैं।" क्या किसी के पास इसका उद्धरण है? –

संबंधित मुद्दे