2009-07-17 11 views
5

मैं extremely long functions in the Linux kernel के बारे में एक अकादमिक परियोजना लिख ​​रहा हूं।क्या आपने बहुत लंबे कार्यों को लिखा है? यदि हां, तो क्यों?

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

क्या आपने कभी ऐसा कोड लिखा है या देखा है? क्या आप इसे पोस्ट या लिंक कर सकते हैं, और स्पष्टीकरण दे सकते हैं कि यह इतना लंबा क्यों है?

मुझे यहां समुदाय से अद्भुत मदद मिल रही है - परियोजना में लिया जाने वाला कोई भी विचार ठीक से जमा किया जाएगा।

धन्यवाद,

उदी

+3

आपको शायद यह समुदाय विकी बनाना चाहिए, क्योंकि यह एक व्यक्तिगत प्रश्न है। – Brandon

+0

वह ऐसा नहीं करेगा। और वह अब डुप्स पोस्ट कर रहा है, जो उसकी शोध परियोजना में मदद करने की संभावना नहीं है। सबूत के लिए अपनी अन्य पोस्ट देखें। –

+0

ठीक है आप हैं। मैं देखता हूं कि आपने अपने पहले के विषयों में से एक में भी वही सुझाव दिया है। – Brandon

उत्तर

10

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

3

पिछली नौकरी: एक बेहद लंबा केस स्टेटमेंट, आईआईआरसी 1000+ लाइनें। यह वस्तुओं से बहुत पहले था। प्रत्येक विकल्प केवल कुछ लाइनें लंबी थी। इसे तोड़ने से यह कम स्पष्ट हो गया होगा। वास्तव में डेटा प्रकारों के समान अंतर्निहित सेट में अलग-अलग चीजें करने वाली ऐसी रूटीन की एक जोड़ी थी।

क्षमा करें, मेरे पास अब कोड नहीं है और यह पोस्ट करने के लिए मेरा नहीं है, वैसे भी।

0

मैं कल्पना कर सकता हूं कि जब गति महत्वपूर्ण होती है (जैसे कर्नेल में किसी प्रकार का ताला लगाते समय) आप कार्यात्मक कॉल करने के कारण ओवरहेड की वजह से कोई फ़ंक्शन तोड़ना नहीं चाहते हैं। संकलित होने पर, पैरामीटर को स्टैक पर धक्का दिया जाना चाहिए और डेटा लौटने से पहले पॉप-अप करना होगा। इसके लिए आपके पास दक्षता कारणों के लिए एक बड़ा कार्य हो सकता है।

+0

शायद, लेकिन जैसा कि नील ने पहले टिप्पणी की - इनलाइनिंग इस समस्या का उत्तर है। –

2

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

1

दुर्भाग्यवश, आपको इस तरह के सबराउटिन को अक्सर चेक या पोस्ट नहीं किया जाएगा यदि यह कुछ प्रकार के कोड जनरेटर का उपयोग करके एक बिल्ड चरण के दौरान स्वतः उत्पन्न होता है।

तो ऐसी परियोजनाओं की तलाश करें जिनके पास सी किसी अन्य भाषा से उत्पन्न हो।

3

यह निकाला जाने से पहले यह आखिरी था।

1

प्रदर्शन के अलावा, मुझे लगता है कि कर्नेल स्पेस में कॉल स्टैक का आकार 8K है (कृपया आकार को सत्यापित करें)। साथ ही, जहां तक ​​मुझे पता है, कर्नेल में कोड काफी विशिष्ट है। अगर भविष्य में कुछ कोड का पुन: उपयोग करने की संभावना नहीं है तो परेशानी कॉल ओवरहेड पर विचार करने के लिए परेशान क्यों करें।

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

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