c++ - Member versus global array access performance -
निम्नलिखित स्थिति पर विचार करें:
class MyFoo {सार्वजनिक: MyFoo (); ~ MyFoo (); शून्य करना कुछ (शून्य); निजी: अहस्ताक्षरित छोटी बातें [10]; }; वर्ग माइबर {सार्वजनिक: मायबर (अहस्ताक्षरित लघु * वैश्विक लेख); ~ MyBar (); शून्य करना कुछ (शून्य); निजी: अहस्ताक्षरित कम * चीजें; }; मायफू :: माइफू () {आईटीआई; के लिए (i = 0; i & lt; 10; i ++) यह- & gt; चीजें [i] = i; }; मायबारा :: MyBar (अहस्ताक्षरित लघु * वैश्विक लेख) {यह- & gt; चीजें = वैश्विक लेख; }; शून्य MyFoo :: doSomething () {int i, j; J = 0; के लिए (i = 0; i & lt; 10; i ++) जे + = यह- & gt; चीजें [i]; }; शून्य MyBar :: doSomething () {int i, j; J = 0; के लिए (i = 0; i & lt; 10; i ++) जे + = यह- & gt; चीजें [i]; }; Int main (int argc, char argv []) {अहस्ताक्षरित छोटा gt [10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; माइफ़ू * एमएफ = नया मायफू (); माइबर * एमबी = नया माइबर (जीटी); mf- & gt; DoSomething (); mb- & gt; DoSomething (); }
क्या यह विश्वास करने का एक प्राथमिक कारण है कि mf.doSomething () mb.doSomething () से तेज़ी से चलेंगे? यदि परिवर्तन योग्य है 100 एमबी?
क्योंकि कोई भी आपके gt सरणी, मायफ़ू पर कुछ अनुकूलन हो सकते हैं जो माइबर के लिए अविभाज्य हैं (हालांकि, इस विशेष उदाहरण में, मुझे कोई नहीं दिखाई देता है)
चूंकि gt स्थानीय स्तर पर है (हम इसे कहते हैं कि डेटा खंड, लेकिन मुझे यकीन नहीं है कि यह अभी भी लागू होता है), जबकि
चीजें
ढेर में रहती हैं (साथ ही एमएफ, और एमबी के दूसरे भाग) कुछ मेमोरी एक्सेस हो सकती हैं; चीजें
से निपटने वाले कैशिंग मुद्दे लेकिन, अगर आप स्थानीय स्तर पर एमएफ बनाते हैं ( MyFoo mf = myFoo ()
), तो यह एक मुद्दा होगा (यानी things
और gf
उस संबंध में समान स्तर पर होगा)
निष्पादन योग्य का आकार किसी भी अंतर को करना चाहिए। डेटा का आकार संभवतः, लेकिन अधिकांश भाग के लिए, पहली पहुंच के बाद, दोनों एरेज़ CPU कैश में होंगे और कोई अंतर नहीं होना चाहिए।
Comments
Post a Comment