2013-08-12 13 views
5

में व्युत्पन्न प्रकार के 2 डी सरणी बनाम सरणी का उपयोग करना मान लें कि आप सरणी की एक सूची चाहते हैं, प्रत्येक का आकार समान है।फोरट्रान 90

integer, allocatable :: data(:,:) 

या व्युत्पन्न प्रकार की एक सरणी: बेहतर प्रदर्शन के लिहाज से एक 2 डी सरणी का उपयोग है

type test 
    integer, allocatable :: content(:) 
end type 
type(test), allocatable :: data(:) 
बेशक

, विभिन्न आकारों की सरणियों के लिए, हम एक विकल्प नहीं है। लेकिन स्मृति 2 मामलों के बीच कैसे प्रबंधित की जाती है? इसके अलावा, उनमें से एक अच्छा कोड अभ्यास है?

उत्तर

4

सामान्य रूप से, आप अपनी समस्या के अनुरूप सबसे सरल डेटा संरचना का उपयोग करना चाहते हैं। यदि एक 2 डी आयताकार सरणी आपकी आवश्यकताओं को पूरा करती है - और वैज्ञानिक कंप्यूटिंग समस्याओं की एक बड़ी संख्या के लिए, फोरट्रान एक अच्छी पसंद है, तो यह करता है - तो यह वही विकल्प है जो आप चाहते हैं।

2 डी सरणी स्मृति में संगत होगी, जो आम तौर पर कैशिंग और एक कम स्तर के संकेत के कारण इसे तेजी से एक्सेस कर देगा; 2 डी सरणी आपको data = data * 2 या data = 0. जैसी चीजों को करने की अनुमति भी देगी जो सरणी-ऑफ-सर दृष्टिकोण नहीं है [जोड़ने के लिए संपादित: हालांकि IanH टिप्पणियों में बताता है कि आप उन प्रकारों पर परिभाषित प्रकार और परिभाषित संचालन कर सकते हैं इस अनुमति के लिए]। वे फायदे काफी अच्छे हैं कि जब भी आपके पास "रैगर्ड एरे" होते हैं, तो अपेक्षित पंक्ति लंबाई की सीमा इतनी बड़ी नहीं होती है, इसे आयताकार 2 डी सरणी के रूप में कार्यान्वित करना कभी-कभी विचार करने योग्य विकल्प होता है।

+2

गुणा के लिए गुणा और असाइनमेंट के बारे में आपकी टिप्पणी के संबंध में परिभाषित परिचालनों द्वारा प्रदान की गई क्षमताओं पर विचार करें। – IanH

+0

पर्याप्त मेला है, लेकिन यह सच है कि 2 डी सरणी में निर्मित का उपयोग करके आप (ए) तेजी से (बी) शायद कम अस्थायी (उदाहरण के लिए, डी = ए * बी + सी), (सी) दोनों आयामों में स्लाइसिंग के साथ एक ही समय, सभी (डी) मुक्त करने के लिए। यह अभी भी कुछ मामलों में सरणी के सरणी करने के लिए और अधिक समझदार होगा, लेकिन यदि आपको उस सामान्य सामान्यता की आवश्यकता नहीं है, तो साधारण मामले का उपयोग करके शायद समझ में आता है। –

9

कार्यान्वयन जो वैचारिक दूरी है कि आपका मन अपने कोड में अपने सिर और समाधान में समस्या के बीच छलांग है को कम करता है का चयन करें। इस दृष्टिकोण की शक्ति उम्र के साथ बढ़ जाती है, आपके कोड की उम्र दोनों (अच्छी वैचारिक डिजाइन भविष्य के विकास के लिए एक ठोस नींव है) और आपकी अपनी उम्र (आपके कोड को समझने की कम कोशिश जितनी अधिक होगी, आप समझने के लिए मानसिक रूप से सक्षम रहेंगे यह)।

स्मृति के प्रबंधन के तरीके से संबंधित आपके प्रश्न के गैर-राय-निर्धारित भाग के रूप में ... मेरी भरोसेमंद उम्मीद यह है कि अधिकांश कंपाइलर, अधिकांश परिस्थितियों में, आपकी रूपरेखा के पहले के लिए संगत स्मृति आवंटित करेंगे, और दूसरे के लिए नहीं हो सकता है। लेकिन मुझे इसकी जांच करने के लिए पर्याप्त परवाह नहीं है, और मुझे नहीं लगता कि आपको या तो चाहिए। मैं नहीं, इस बात से सुझाव देता हूं कि आपको हूड के तहत क्या हो रहा है, इस बारे में कोई दिलचस्पी नहीं लेनी चाहिए, बल्कि आपको पहले पैराग्राफ में उल्लिखित मामलों से अधिक चिंतित होना चाहिए।

+1

+1 - जितना अधिक मैं इस बारे में सोचता हूं, "वैचारिक दूरी को कम करना" शायद "सरल" के कुछ अमूर्त उपाय से अधिक महत्वपूर्ण है। –

+0

यह ठीक है! आपको पठनीयता और प्रदर्शन के बीच संतुलन मिलना है ... – Girardi

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