2016-12-08 11 views
6

मैं subroutine में घोषित एक subroutine के लिए एक सरणी पारित करने की कोशिश कर रहा था, एक अनुमानित आकार सरणी के रूप में। वह मुझे कुछ समस्याएं दे रहा था कि मैं इसके बजाय एक पॉइंटर पास करके हल करने में सक्षम हूं।क्या पॉइंटर्स संकलक अनुकूलन को रोकते हैं?

लेकिन एक उच्च प्रतिष्ठा के साथ कुछ उपयोगकर्ता एक टिप्पणी में मुझसे कहता है:

सूचक जोड़ने से भी compilers अनुकूलक यह आज किसी भी काम करने के लिए नहीं है कि बताने का एक उचित तरीका है।

क्या कोई इस पर एक संक्षिप्त स्पष्टीकरण दे सकता है? भाषा फोरट्रान 95 है, हालांकि मुझे विश्वास है कि यह अन्य भाषाओं पर लागू होता है।

+0

मुझे लगता है कि ओपी [इस टिप्पणी] का जिक्र कर रहा है (http://stackoverflow.com/questions/41009109/subroutine-not-returning-correct-numerical-values-in-assumed-shape-array-due-to # comment69272729_41032273)। – 4castle

+1

यह सच है। सिम के लिए यह गारंटी देना मुश्किल है कि डेटा अनुक्रमिक है कि बिंदु अनुक्रमिक रूप से अनुक्रमणित है या नहीं। अधिकतर भाषाओं की तुलना में फोरट्रान के लिए यह अधिक सही है, क्योंकि फोर्ट्रान विशेष रूप से वैक्टर/सरणी को लक्षित कर रहा है। लेकिन कंपाइलरों की गड़बड़ी आम तौर पर एक एसिम्पटोट के पास आती है जहां असेंबली फोर्टन और सी के बीच समान हो सकती है। आम तौर पर कुछ चीजों के लिए मतलब है, और अधिक कठिन कोड के लिए अधिक काम की आवश्यकता है। – Holmz

+1

@ 4castle में मैंने उद्देश्य पर मूल टिप्पणी का एक लिंक शामिल नहीं किया है, क्योंकि इसमें भ्रामक जानकारी शामिल है: (एक पॉइंटर का उपयोग करके) "अब आप सरणी अनुभाग पास करने में सक्षम नहीं हैं", जो गलत है। Subroutine के लिए तर्क के रूप में इसे पारित करने से पहले एक सरणी खंड में एक सूचक को असाइन करने से कुछ भी आसान नहीं है। – Mephisto

उत्तर

4

हां, फोरट्रान कंपाइलर्स को यह मानना ​​है कि पॉइंटर्स अन्य पॉइंटर्स के साथ और target चर के साथ उपनाम कर सकते हैं।

आप सूचक सरणियों a और

a(i) = a(i) + b(i) 

संकलक मान लेना चाहिए कि इन दो सरणियों आंशिक रूप से ओवरलैप हो सकता है और यह कुछ अनुकूलन को बाधित क्योंकि a का मान बदलने के कुछ मूल्य बदल सकते हैं चाहिए तो b है कुछ अज्ञात इंडेक्स पर b

सी restrict कीवर्ड और Is Fortran easier to optimize than C for heavy calculations? पर एक और अधिक व्यापक चर्चा भी देखें। वहां उठाए गए पॉइंटर एलियासिंग के बारे में सभी बिंदुओं को दोहराने लायक नहीं है।

इयानएच की टिप्पणी जानबूझकर शायद बहुत मजबूत थी, लेकिन इसमें बहुत सच्चाई है।

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