क्या सी 99 वीएलए का उपयोग करना अच्छा विचार है? मॉलोक/फ्री की तुलना में वीएलए का उपयोग करना कब उचित है? (VLA ढेर को उड़ाने सकता है, क्योंकि?)क्या मॉलोक/फ्री की तुलना में सी 99 वीएलए का उपयोग करना अच्छा विचार है?
उत्तर
हां, उन मामलों को छोड़कर जहां आप जानते हैं कि आपका ढेर उड़ सकता है। यदि आवश्यक हो तो आप स्टैक के आकार को भी बदल सकते हैं, यह अलग-अलग ओएस पर अलग है लेकिन यह संभव है। VLA के लाभ हैं:
फास्ट: ढेर सूचक और/या फ्रेम सूचक का समायोजन वैसे भी होगा किया गया है तो एक VLA की लागत लगभग 0.
आसान है: एक साधारण परिभाषा, प्रारंभ करने के लिए कोई संकेतक, मुफ्त में जांचने और स्मृति रिसाव का कोई जोखिम नहीं।
यह स्वचालित रूप से थ्रेड सुरक्षित है क्योंकि प्रत्येक धागे का अपना ढेर होता है। यह भी बेहतर स्केलिंग है क्योंकि लॉकिंग की कोई आवश्यकता नहीं है, एक समस्या जो
malloc/free
का उपयोग करते समय उत्पन्न हो सकती है।पठनीय: यह वास्तव में एक साधारण अवधारणा है, सूक्ष्म बग पेश करने की संभावना कम है।
यह कुछ कमियां भी हैं:
आकार सीमित: के रूप में पहले ही कहा, ढेर को उड़ाने कर सकते हैं।
बफर ओवरफ्लो ढेर मेमोरी की तुलना में थोड़ा अधिक गंभीर हैं (कोई तर्क दे सकता है कि यह एक लाभ है, क्योंकि एक क्रैशिंग एप्लिकेशन एक चुपचाप भ्रष्ट डेटा से बेहतर है और अंततः असंबद्ध निर्देशों पर क्रैश हो रहा है)।
पोर्टेबिलिटी: नहीं सभी compilers इसे लागू, लेकिन अक्सर यह (अर्थ थोड़ा अलग लेकिन कुछ भी वास्तव में गंभीर है ध्यान)
alloca
से प्रेरित किया जा सकता है।
यदि आप उपयोग का अनुकरण करते हैं 'alloca()' (+1) आप 'sizeof' का उपयोग नहीं कर सकते, जिसे अक्सर मैक्रोज़ के अंदर छिपाया जाता है। –
ढेर आवंटन के साथ प्राथमिक लाभ यह है कि आप आवंटित चर लंबाई सरणी के स्वचालित स्मृति प्रबंधन मिलता है। चूंकि स्मृति प्रबंधन किसी भी सी प्रोग्राम के लिए मुख्य चुनौतियों में से एक है, इसलिए आप निश्चित रूप से अपने कार्य को सरल बनाने के लिए वीएलए का उपयोग करना चाहिए, यदि आप कर सकते हैं।
मैं तो वकालत करेगा कि आप VLA के consistenly जब आप कर सकते हैं का उपयोग करना चाहिए, और नहीं तो malloc का प्रयोग तभी करें: आप भंडारण की अवधि को नियंत्रित करने की जरूरत है, और यदि आप बहुत बड़े आवंटन है, और आप बाहर संभाल करना चाहते हैं मेमोरी त्रुटियों की गलती से।
कितना बड़ा 'बहुत बड़ा' \ o/ –
C99 से संबंधित लिंक (चर लंबाई सरणियों के बारे में जानकारी के लिए लिंक शामिल हैं) का एक अच्छा सूची के लिए देखें:
Xcode अब चूक C99 उपयोग करने के लिए - तो C99 क्या है?
http://lists.apple.com/archives/xcode-users/2008/May/msg00665.html
सी ++ Vlas समर्थन नहीं करता। इसलिए सी ++ को कोड पोर्ट करने के लिए यह थोड़ा और प्रयास होगा, आवश्यकता की आवश्यकता होनी चाहिए।
फिर, कुछ मानते हैं कि यह वास्तव में एक अच्छी बात है और चालाकी से "वर्ग" इस तरह के Vlas के रूप में सी में एक प्रतीक के लिए एक अद्भुत नाम के रूप में प्रस्ताव :-)
'कुछ का मानना है कि यह वास्तव में एक अच्छी बात है और चालाकी से "वर्ग" को प्रतीक में एक प्रतीक के लिए एक अद्भुत नाम के रूप में प्रस्तावित करता है :-)': ठीक है, जब कोई बेहतर नहीं हो सकता है, तो जीतने का सबसे अच्छा तरीका है छेड़छाड़ करने का प्रयास करना प्रतियोगिता... – paercebal
- 1. क्या पाइथन में सुपर() का उपयोग करना अच्छा विचार है?
- 2. क्या सी में सार्वजनिक एपीआई फ़ंक्शन में एनम पैरामीटर का उपयोग करना अच्छा विचार है?
- 3. क्या है (TRUE) सी में एक अच्छा विचार है?
- 4. क्या सी # स्ट्रिंग की तुलना '==' से तुलना करना अच्छा अभ्यास है?
- 5. क्या सी ++ में size_t का उपयोग करना अच्छा अभ्यास है?
- 6. क्या यह निर्धारित करने के लिए IEEE754 फ़्लोटिंग पॉइंट NaN का उपयोग करना अच्छा विचार है?
- 7. क्या डेटाबेस डिजाइन में अद्वितीय कुंजी के रूप में rowguid का उपयोग करना अच्छा विचार है?
- 8. क्या JQuery की सत्यापन प्लगइन का उपयोग करना अच्छा है?
- 9. क्या DataContractSerializer उदाहरणों को कैश करना अच्छा विचार है?
- 10. क्या फ़ील्ड को संरक्षित करना एक अच्छा विचार है?
- 11. 99 99 99 99 99 99 99 99 जावास्क्रिप्ट में 10000000000000000 में क्यों परिवर्तित किया गया है?
- 12. क्या एमएसएमक्यू एक अच्छा विचार है
- 13. सी 99
- 14. क्या महत्वपूर्ण मूल्य जोड़े सेट करने के लिए सी एपीआई में varargs का उपयोग करना अच्छा विचार है?
- 15. क्या पुराने रेल माइग्रेशन को पतन करना अच्छा विचार है?
- 16. एक संदेश कतार में लॉग इन करना अच्छा विचार है?
- 17. क्या नामस्थान ब्लॉक में # अंतर्निहित लपेटना अच्छा विचार है?
- 18. क्या रिकॉर्ड के बजाए एसोसिएशन सूचियों का उपयोग करना कभी अच्छा विचार है?
- 19. क्या MySQL और Neo4j का एक साथ उपयोग करना अच्छा विचार है?
- 20. डबल.परसेड डबल 99 99 99 99 99 99 99 99 10000000000000000 क्यों बना रहा है?
- 21. क्या सी 99 प्रीप्रोसेसर ट्यूरिंग पूरा है?
- 22. क्या फ़ंक्शन से "कॉन्स्ट char *" वापस करना अच्छा विचार है?
- 23. के भीतर <noscript> का उपयोग करना: अच्छा विचार या बुरा विचार?
- 24. क्या विशेष वर्णों के साथ यूआरएल नामों का उपयोग करना अच्छा विचार है?
- 25. सी 99 + सी ++ (जीसीसी)
- 26. क्या वर्चर (अधिकतम) को संग्रहीत प्रक्रिया तर्क के रूप में उपयोग करना अच्छा विचार है?
- 27. क्या उद्देश्य-सी में विधि पैरामीटर को बनाए रखने/रिलीज़ करना एक अच्छा विचार है?
- 28. आईफोन एसडीके की तुलना में मोनो टच कितना अच्छा है?
- 29. क्या डेटाबेस में यूएस ज़िप कोड संग्रहित करने के लिए एक पूर्णांक कॉलम का उपयोग करना एक अच्छा विचार है?
- 30. क्या रचनाकारों में व्यावसायिक तर्क एक अच्छा विचार है?
बचें अस्पष्टीकृत TLAs ... –
@ थॉमस: शब्द "वीएलए" * * सी 99 के संदर्भ में एक अच्छी तरह से स्थापित, प्रसिद्ध अर्थ है। प्रश्न का उत्तर देने में कोई भी व्यक्ति यह जान लेगा कि इसका क्या अर्थ है। –
संभावित डुप्लिकेट: http://stackoverflow.com/questions/2034712/is-there-any-overhead-for-using-variable-length-arrays –