2010-08-15 13 views
5

मान लीजिए कि मैंने आरटीटीआई और रन-टाइम पॉलिमॉर्फिज्म (वर्चुअल फ़ंक्शन, वर्चुअल विरासत नहीं) के बिना सी ++ में एक प्रोग्राम लिखा है और कक्षाओं में निजी/संरक्षित सदस्य नहीं हैं, सी ++ विशिष्ट शीर्षलेख फ़ाइलों का भी उपयोग नहीं किया जाता है (यानी सी हेडर फाइलों का उपयोग किया जाता है: cstring, cstdio, ... string, iostream, ... के बजाय ...)।क्या एक सी ++ प्रोग्राम वास्तव में एक समान सी प्रोग्राम से धीमा है?

फिर मैं सी में एक समान प्रोग्राम लिखना चाहता हूं जो कार्यों का पहला तर्क प्रकार संबंधित struct से मेल खाता है।

//C++ code 

struct Custom 
{ 
    int a; 
    Custom() { } 
    void change() { } 
    ~Custom() { } 
}; 

int main() 
{ 
    Custom m; //init m 
    m.change(); 
    //destroy m 
} 

/*C code*/ 

struct Custom 
{ 
    int a; 
}; 
void custom_init(Custom* like_this) { } 
void custom_change(Custom* like_this) { } 
void custom_destroy(Custom* like_this) { } 

int main() 
{ 
    Custom m; 
    custom_init(&m); 
    custom_change(&m); 
    custom_destroy(&m); 
} 

सी ++ प्रोग्राम समान सी कार्यक्रम (आम तौर पर) की तुलना में धीमी है:

उदाहरण के लिए

? यदि हां, तो क्यों सी प्रोग्राम तेजी से हैं? मुझे पता है, सी ++ स्मृति प्रबंधन के लिए आरएआईआई डिजाइन पैटर्न का उपयोग करता है, क्या यह धीमी गति का कारण है?

मैंने सुना है कि कुछ लोगों ने कहा है कि सी प्रोग्राम तेजी से हैं ... क्यों?

संपादित करें: यह प्रश्न क्यों बंद है? मैं जानना चाहता था कि सी ++ कुछ अतिरिक्त करता है जिसे हमें जरूरत नहीं है, और यह प्रदर्शन को कैसे प्रभावित करता है (इसे धीमा कर देता है? तेज़? या कुछ नहीं?)।

+1

उत्तर कंपाइलर/प्लेटफार्म/हार्डवेयर पर निर्भर करेगा। बस दोनों कार्यक्रमों, बेंचमार्क संकलित करें। इसके अलावा, कुछ मामलों में, गलती से स्क्रूअप का कारण अतिरिक्त गति के लायक नहीं हो सकता है। – SigTerm

+6

बंद मत करो। हर बार किसी चीज की तुलना में नाराज न हों। मैं किसी को यह जानना चाहूंगा कि क्या ऐसी स्थिति है जहां यह मामला है। –

+0

यह सुनकर कि आपने सी सी ++ से तेज है, क्योंकि वे दोनों के बीच की तुलना में एक तेज दृष्टि दोनों तेज हैं, वे मटर और सेम हैं। –

उत्तर

6

सी ++ आरएआईआई का उपयोग नहीं करता है। आप अपने सी ++ प्रोग्राम में आरएआईआई का उपयोग कर सकते हैं।
जब तक आप सी ++ में सी और 0,में वही काम कर रहे हैं, तब तक दोनों कार्यक्रम बिल्कुल तेज़ होना चाहिए।
सी या सी ++ में तेजी से प्रोग्राम लिखना प्रोग्रामिंग भाषा का विषय नहीं है, लेकिन आप किस प्रकार की सुविधा का उपयोग करते हैं।

+1

यदि हम उपरोक्त उदाहरण में 'm' चर' जैसे पॉइंटर्स का उपयोग नहीं करते हैं, तो C++ अपनी स्मृति को आवंटित करने और मुक्त करने के लिए RAII का उपयोग करता है (जब कन्स्ट्रक्टर में कोई त्रुटि आई, आवंटित स्मृति मुक्त हो जाएगी) (और यदि कोई त्रुटि हो वर्ग प्रारंभ करने के बाद हुआ है, विनाशक स्वचालित रूप से बुलाया जाएगा)। –

+1

@ पीसी 2st बस क्योंकि यह काम करता है जैसे राई का मतलब यह नहीं है कि यह आरआईआईआई है। – SoapBox

+1

@ पीसी 2st जब आप कहते हैं कि कोई त्रुटि होती है, तो आपका मतलब है कि कोई अपवाद सही है? इसका मतलब है कि आप एक अतिरिक्त सुविधा का उपयोग कर रहे हैं जिसका उपयोग आपने सी में नहीं किया होगा। यदि आप तुलनात्मक अर्थपूर्ण होना चाहते हैं तो आपको या तो अपवाद का उपयोग नहीं करना चाहिए, या तो सी में अपवाद हैंडलिंग लागू करना चाहिए। – log0

2

नहीं, यह लगभग निश्चित रूप से झूठा है। खुद ही आरएआईआई कार्यक्रम को धीमा नहीं करेगा। सी और सी ++ कंपेलर दोनों शायद इन उदाहरणों के लिए लगभग समान कोड उत्पन्न करेंगे।

4

आप तब तक कभी नहीं जानते जब तक आप कोशिश नहीं करते। यदि सी ++ कुछ भी उपयोग करता है जो सी नहीं करता है (जैसे कन्स्ट्रक्टर, विनाशक और यहां तक ​​कि गैर-वर्चुअल विधियां), तो धीमा हो सकता है।

लेकिन अंतर शायद अनजान होने के लिए इतना छोटा होगा।

सी ++ के शुरुआती कार्यान्वयन सी से धीमे हो सकते हैं लेकिन यह सॉफ़्टवेयर की प्रकृति है। यह समय के साथ सुधारता है।

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

+0

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

+0

@ पीसी 2st, अगर आप उसे जानना चाहते हैं, तो परीक्षण करें। यह कार्यान्वयन पर निर्भर करेगा। मैं आसानी से एक सी संकलक लिख सकता हूं जो जी ++ की तुलना में धीमी गति उत्पन्न करता है (जो असेंबलर आउटपुट के आधार पर वास्तव में संभवतः है, जी ++ लोग I से ऑप्टिमाइज़ेशन के बारे में अधिक जानकार हैं)। क्रिक, मैं एक सी कंपाइलर लिख सकता हूं जिसका कोड GWBASIC से धीमा हो गया :-) जब तक आप _specific कार्यान्वयन_ की तुलना करना शुरू नहीं करते (ताकि वास्तविक डेटा लोगों के उपाख्यानों के बजाय एकत्र किया जा सके), सवाल बेकार लगता है। – paxdiablo

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