2012-09-16 7 views
7

क्षमा करें अगर सवाल बेवकूफ लगता है। मैं केवल डेटा संरेखण के मुद्दे के बारे में अस्पष्ट रूप से संज्ञेय हूं और कभी भी 64-बिट प्रोग्रामिंग नहीं किया है। मैं अभी कुछ 32-बिट x86 कोड पर काम कर रहा हूं। यह अक्सर int की एक सरणी का उपयोग करता है। कभी-कभी एक 32-बिट पूर्णांक पढ़ा जाता है। कभी-कभी दो या अधिक पढ़े जाते हैं। कुछ बिंदु पर मैं कोड 64-बिट बनाना चाहता हूं। मुझे यकीन नहीं है कि मुझे इस int सरणी को int या long int के रूप में घोषित करना चाहिए। मैं इसके बजाय पूर्णांक की चौड़ाई रखूंगा, इसलिए मुझे मतभेदों के बारे में चिंता करने की ज़रूरत नहीं है। मैं चिंतित हूं कि किसी ऐसे पते को पढ़ना/लिखना जो प्राकृतिक शब्द से गठबंधन नहीं है, धीमा हो सकता है।क्या x86-64 में 32-बिट पूर्णांक की एक सरणी का प्रदर्शन पेनल्टी एक्सेस है?

+1

यदि आप निश्चित-चौड़ाई पूर्णांक चाहते हैं तो प्रयास करें: '' – Mysticial

+0

'int' आर्किटेक्चर के लिए प्राकृतिक प्रकार 'int32_t' है। जब तक कि आपके पास एक अलग प्रकार का उपयोग करने का कोई अच्छा कारण न हो, तब तक नहीं। –

+0

@PeteBecker नहीं यह नहीं है। आज भी अधिकांश सिस्टम पर 'int' अभी भी 32-बिट्स है। – Mysticial

उत्तर

7

मिसाइलमेंटमेंट दंड केवल तब होता है जब लोड या स्टोर संरेखण सीमा पार करता है।

  • प्राकृतिक हार्डवेयर की शब्द-size: सीमा आमतौर पर का छोटा होता है। (32-बिट्स या 64-बिट *)
  • डेटा-प्रकार का आकार।

यदि आप 64-बिट (8-बाइट) आर्किटेक्चर पर 4-बाइट शब्द लोड कर रहे हैं। इसे 8-बाइट गठबंधन करने की आवश्यकता नहीं है। यह केवल 4-बाइट गठबंधन होना चाहिए।

इसी तरह, यदि आप किसी भी मशीन पर 1-बाइट चार लोड कर रहे हैं, तो इसे बिल्कुल गठबंधन करने की आवश्यकता नहीं है।

* ध्यान दें कि सिमड वैक्टर एक बड़े प्राकृतिक शब्द-आकार का संकेत दे सकते हैं। उदाहरण के लिए, 16-बाइट एसएसई को अभी भी x86 और x64 दोनों पर 16-बाइट संरेखण की आवश्यकता है। (स्पष्ट गलत संरेखित भार/दुकानों को छोड़कर)


संक्षेप में

तो, कोई आप डेटा-संरेखण के बारे में चिंता करने की जरूरत नहीं है। भाषा और संकलक आपको इसके बारे में चिंता करने से रोकने के लिए बहुत मेहनत करता है।

तो बस जो कुछ भी डेटाटाइप आपके लिए सबसे ज्यादा समझ में आता है उसके साथ चिपके रहें।

1

यहाँ उपलब्ध अच्छी जानकारी का एक बहुत कुछ है: Performance 32 bit vs. 64 bit arithmetic

इससे भी अधिक जानकारी https://superuser.com/questions/56540/32-bit-vs-64-bit-systems, जहां जवाब सबसे खराब देखा है के लिए 5% धीमा (एक आवेदन परिप्रेक्ष्य, न कि व्यक्तिगत कार्यों से) का दावा है।

संक्षिप्त उत्तर नहीं है, आप प्रदर्शन हिट नहीं करेंगे।

3

64-बिट x86 CPUs अभी भी 32-बिट मानों के कुशल हेरफेर के लिए अत्यधिक अनुकूलित किए गए हैं। 64-बिट ऑपरेटिंग सिस्टम पर भी, 32-बिट मानों तक पहुंच कम से कम 64-बिट मानों तक पहुंचने जितनी तेज है। अभ्यास में, यह वास्तव में तेज़ होगा क्योंकि कम कैश स्पेस और मेमोरी बैंडविड्थ का उपभोग होता है।

1

जब भी आप किसी भी स्मृति स्थान तक पहुंचते हैं तो एक संपूर्ण कैश लाइन एल 1 कैश में पढ़ी जाती है, और उस लाइन में किसी भी चीज़ के बाद की पहुंच जितनी जल्दी हो सके। जब तक आपकी 32-बिट पहुंच कैश लाइन को पार न करे (जो यह 32-बिट संरेखण पर नहीं होगी) तो यह 64-बिट पहुंच जितनी तेज होगी।

+0

काफी नहीं। 1 मान तक पहुंच एक जैसी होगी। यदि आप एक और * 32-बिट मान को एक्सेस करते हैं जो एक ही कैश लाइन में है, तो यह पहले से ही होगा - आप इसे "बाद में ..." के साथ भी बताएंगे। प्रति कैश लाइन के अधिक डेटा तत्व लोड करने के कारण छोटे डेटा आकारों का उपयोग आमतौर पर अधिक कैश अनुकूल होता है। – phkahler

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