मुझे आश्चर्य है कि सी ++ में कक्षाओं और सी स्टाइल structs की प्रदर्शन तुलना g ++ -O3 विकल्प के साथ होती है। क्या इसके बारे में कोई बेंचमार्क या तुलना है। मैंने हमेशा सी ++ कक्षाओं को भारी और संभावित रूप से धीमे के रूप में सोचा है (संकलन समय मेरे लिए बहुत महत्वपूर्ण नहीं है, रन टाइम अधिक महत्वपूर्ण है)। मैं एक बी-पेड़ को लागू करने जा रहा हूं, क्या मुझे इसे प्रदर्शन के लिए कक्षाओं या structs के साथ लागू करना चाहिए।स्ट्रक्चर बनाम कक्षाओं के प्रदर्शन
उत्तर
रनटाइम स्तर पर सी 0+ में सभी पर structs और कक्षाओं के बीच कोई अंतर नहीं है। इसलिए यदि आप अपने कोड में struct A
या class A
का उपयोग करते हैं तो यह कोई प्रदर्शन अंतर नहीं करता है।
अन्य बात, कुछ विशेषताओं जैसे कि कन्स्ट्रक्टर, विनाशक और आभासी कार्यों का उपयोग कर रही है, - कुछ प्रदर्शन दंड हो सकते हैं (लेकिन यदि आप उनका उपयोग करते हैं तो आपको शायद उन्हें वैसे भी चाहिए)। लेकिन आप समान सफलता के साथ अपनी कक्षा या संरचना दोनों के अंदर उपयोग कर सकते हैं।
this document में आप सी ++ के अन्य प्रदर्शन-संबंधित subtleties के बारे में पढ़ सकते हैं।
क्या आप उनकी स्मृति खपत के बारे में कोई दस्तावेज़ या बेंचमार्क जानते हैं: structs बनाम कक्षाएं। – systemsfault
एक बार फिर: रनटाइम स्तर पर structs और कक्षाओं के बीच कोई अंतर नहीं - दोनों प्रदर्शन और स्मृति खपत। आप उनके बारे में एक ही चीज़ के लिए अलग-अलग कीवर्ड के रूप में सोच सकते हैं जो केवल सदस्यों और डिफ़ॉल्ट विरासत मोड में डिफ़ॉल्ट पहुंच में भिन्न होते हैं (और आप टेम्पलेट पैरामीटर सूची के अंदर 'स्ट्रक्चर' का उपयोग नहीं कर सकते हैं, लेकिन आपका प्रश्न इसके बारे में नहीं है, है ना?) –
AFAIK, प्रदर्शन बिंदु से, वे सी ++ के बराबर हैं।
उनका अंतर synctatic चीनी है जैसे स्ट्रक्चर सदस्यों डिफ़ॉल्ट रूप से सार्वजनिक हैं, उदाहरण के लिए।
my2c
सी ++ में, struct
कक्षाएं जिसके सदस्य डिफ़ॉल्ट रूप से सार्वजनिक कर रहे हैं के लिए वाक्यात्मक चीनी है।
या इसे एक और तरीके से देखते हुए, 'स्ट्रक्चर' सिंटैक्स है जो सी के पीछे पिछड़ा है, और 'कक्षा' कक्षाओं के लिए अधिक ओओपी जैसी सिंटैक्टिक चीनी है जिसका सदस्य डिफ़ॉल्ट रूप से निजी हैं ... –
मैं यह जवाब देना चाहता हूं +1.000.000 (केवल थोड़ा उत्सुक;)) अगर मैं कर सकता हूं, क्योंकि गलत सवाल जो मूल प्रश्न की ओर जाता है वह इतना व्यापक है। इसलिए हर कोई मेरे पीछे दोहराता है: "**' struct' और 'class' समकक्ष ** (डिफ़ॉल्ट पहुंच को छोड़कर) " –
मैं चीनी से दूर हूं। क्या मुझे चीनी मुक्त संरचना मिल सकती है? –
डेटा संरचना में हेरफेर करने के लिए एक कुशल डेटा संरचना और कुशल तर्क बनाने पर ध्यान केंद्रित करें। सी ++ कक्षाएं सी-स्टाइल structs की तुलना में स्वाभाविक रूप से धीमी नहीं हैं, इसलिए इसे अपने डिज़ाइन को सीमित न करें।
उन्होंने कक्षाओं और structs के बीच मतभेदों के बारे में स्पष्ट रूप से पूछा और सॉफ्टवेयर डिजाइन के बारे में युक्तियों के बारे में नहीं। – Tara
मेरी ईमानदार राय ... प्रदर्शन के बारे में चिंता न करें जब तक कि यह वास्तव में स्वयं को कोई समस्या न हो, फिर अपना कोड प्रोफाइल करें। सभी बुराईयो की जड़ समयपूर्व इष्टतमीकरण है। लेकिन, जैसा कि अन्य ने कहा है, रनटाइम पर सी ++ में संरचना और कक्षा के बीच कोई अंतर नहीं है।
बस एक प्रयोग करें, लोग! ,
#include <iostream>
#include <string>
#include <ctime>
using namespace std;
class foo {
public:
void foobar(int k) {
for (k; k > 0; k--) {
cout << k << endl;
}
}
void initialize() {
accessor = "asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf";
}
string accessor;
};
struct bar {
public:
void foobar(int k) {
for (k; k > 0; k--) {
cout << k << endl;
}
}
void initialize() {
accessor = "asdfasdfasdfasdfasdfasdfasdfasdfasdfasdf";
}
string accessor;
};
int main() {
clock_t timer1 = clock();
for (int j = 0; j < 200; j++) {
foo f;
f.initialize();
f.foobar(7);
cout << f.accessor << endl;
}
clock_t classstuff = clock();
clock_t timer2 = clock();
for (int j = 0; j < 200; j++) {
bar b;
b.initialize();
b.foobar(7);
cout << b.accessor << endl;
}
clock_t structstuff = clock();
cout << "struct took " << structstuff-timer2 << endl;
cout << "class took " << classstuff-timer1 << endl;
return 0;
}
अपने कंप्यूटर पर struct 1286 घड़ी टिक्स ले लिया, और वर्ग 1450 घड़ी टिक्स ले लिया:
यहाँ प्रयोग मैं तैयार किया गया है के लिए कोड है। अपने प्रश्न का उत्तर देने के लिए, संरचना थोड़ा तेज है। हालांकि, इससे कोई फर्क नहीं पड़ता, क्योंकि कंप्यूटर इन दिनों इतनी तेजी से हैं।
दरअसल, यह परीक्षण इष्टतम नहीं हो सकता है, प्रोसेसर को इसे निष्पादित करने के लिए तैयार होने के बाद पहले परीक्षण में दूसरे से अधिक समय लग जाएगा। उपायों को लेने से पहले कई बार लूप चलाने और आईओ का उपयोग करने से बचने के लिए बेहतर होगा क्योंकि यह माप परिशुद्धता में काफी बाधा डालता है। मैंने आपके परीक्षण में कुछ बदलाव किए हैं और मेरे नतीजे बताते हैं कि दोनों का प्रदर्शन समान होता है, कभी-कभी कोई दूसरा बार दूसरी बार थोड़ा तेज़ हो जाता है, यानी: (कक्षा: 1116, 530, 523, 507) (संरचना: 1087, 4 9 8, 541 , 543)। – VinGarcia
मेरा मूल कोड ऐसा करना था, लेकिन मैंने इसे दुर्घटना से हटा दिया, इसलिए मैंने पोस्ट करने के लिए कुछ त्वरित और गंदे कोड लिखा :) – ndrewxie
- 1. कॉन्फ़िगरेशन स्ट्रक्चर बनाम सेटर्स
- 2. सी/सी ++ स्ट्रक्चर बनाम कक्षा
- 3. रूबी बनाम स्ट्रक्चर बनाम परीक्षण
- 4. स्ट्रक्चर
- 5. कैलियर प्रदर्शन बनाम UIImageView प्रदर्शन
- 6. प्रदर्शन या प्रदर्शन का प्रदर्शन (||) बनाम ऐरे()
- 7. प्रदर्शन - Date.now() बनाम Date.getTime() बनाम
- 8. स्ट्रक्चर के लिए एनएसडीटा को स्ट्रक्चर?
- 9. बनाम nvarchar प्रदर्शन nchar
- 10. ओपनसीएल बनाम ओपनएमपी प्रदर्शन
- 11. मेमोरी बनाम प्रदर्शन
- 12. RenderAction बनाम RenderPartial प्रदर्शन
- 13. सीएसवी बनाम MySQL प्रदर्शन
- 14. सी ++ प्रदर्शन, बनाम
- 15. डेटाकंट्रैक्टसेरियलाइज़र बनाम बाइनरीफॉर्मेटर प्रदर्शन
- 16. प्रदर्शन: XDocument बनाम XmlDocument
- 17. प्रदर्शन बनाम गुणवत्ता कोड
- 18. क्यूटी बनाम जीटीके + प्रदर्शन
- 19. प्रदर्शन स्ट्रिंगबफ बनाम स्ट्रिंग
- 20. प्रदर्शन काउंटर बनाम ईटीडब्ल्यू
- 21. MySQL प्रदर्शन: बनाम कहां
- 22. strftime प्रदर्शन बनाम snprintf
- 23. प्रदर्शन परीक्षण बनाम प्रोफाइलिंग
- 24. SimpleXML बनाम DOMDocument प्रदर्शन
- 25. जेनिक्स बनाम ऑब्जेक्ट प्रदर्शन
- 26. - प्रदर्शन बनाम भविष्य
- 27. प्रदर्शन: बाइनरीफॉर्मेटर बनाम एक्सएमएलएसरियलाइज़र
- 28. फोनगैप ऐप प्रदर्शन बनाम देशी ऐप प्रदर्शन
- 29. अद्यतन बनाम INSERT प्रदर्शन
- 30. एनएचबीर्नेट एचक्यूएल बनाम मानदंड बनाम क्वेरीरी बनाम लिंक बनाम। प्रदर्शन
आप अपने कौन से सटीक जुड़वां सबसे ज्यादा प्यार करते हैं? –
असल में मैंने सी ++ structs की उन्नत विशेषताओं का कभी भी उपयोग नहीं किया है, मैंने हमेशा सी डेटा की तरह सार्वजनिक डेटा के लिए डेटा कंटेनर के रूप में उपयोग किया है। जब मुझे विरासत, बहुरूपता आदि जैसी जटिल कार्यक्षमताओं की आवश्यकता होती है, तो मैं कक्षाओं का उपयोग करना पसंद करता हूं। तो यह एक प्यार और नफरत संबंध नहीं है – systemsfault