मैं ऑफ-जाली प्रसार सीमित एकत्रीकरण (डीएलए) सिमुलेशन लिखने वाला हूं और मैं सोच रहा हूं कि सी या सी ++ का उपयोग करना है या नहीं।सी बनाम सी ++ संख्यात्मक सिमुलेशन (प्रदर्शन)
सी ++ डिजाइन कारणों से अच्छा होगा लेकिन मुझे आश्चर्य है कि सी बेहतर प्रदर्शन करेगा या नहीं। बेशक मैं एल्गोरिदम प्रदर्शन के बारे में जानता हूं और सर्वोत्तम संभव एल्गोरिदम चुना है। इसलिए मैं ओ (एन^2) से ओ (लॉग एन) या इसी तरह के सुधार के बारे में बात नहीं कर रहा हूं। मैं बोलने के लिए अपने स्थिरांक को कम करने की कोशिश कर रहा हूं।
यदि आपको डीएलए नहीं पता है तो यह मूल रूप से युगल (10^3 और 10^6 के बीच आकार) के लिए उबाल जाता है और एक लूप में यादृच्छिक युगल चुनने के लिए (अधिक/कम) तुलना करने के लिए बड़े भाग सरणी
- डेटा एक्सेस: सार्वजनिक डेटा सदस्यों के मुकाबले निजी डेटा के सदस्यों और accessors साथ सी ++ वर्ग के साथ सी struct बनाम सी ++ वर्ग
तो प्रदर्शन अंतर जो इस के लिए कोई फर्क होगा डेटा का उपयोग और बुला कार्यों है।
- कॉलिंग फ़ंक्शंस: सी फ़ंक्शंस बनाम सी ++ सदस्य फ़ंक्शन।
क्या मुझे यह निष्कर्ष निकालने का अधिकार है कि इसका न्याय करने का अंतिम तरीका असेंबली कोड (उदाहरण के लिए चाल/भार, कूद और कॉल की संख्या की तुलना करना) को देखना है? यह निश्चित रूप से संकलक निर्भर है (उदाहरण के लिए आप एक भयानक सी संकलक की तुलना एक अच्छे सी ++ कंपाइलर से कर सकते हैं)। मैं जीएनयू कंपाइलर्स (जीसीसी और जी ++) का उपयोग कर रहा हूं।
सी कार्यक्रम
:मैं पाया है कि विधानसभा जीसीसी और जी ++ द्वारा पैदा करता छलांग (कोई नहीं), चलता रहता है/भार और कॉल दो निम्नलिखित कार्यक्रमों के लिए की संख्या के मामले में लगभग समान है
#include <stdlib.h>
typedef struct
{
double x;
} particle;
double square(double a)
{
return a*a;
}
int main()
{
particle* particles = malloc(10*sizeof(particle));
double res;
particles[0].x = 60.42;
res = square(particles[0].x);
return 0;
}
सी ++ प्रोग्राम
class particle
{
public:
double x;
public:
double square()
{
return x*x;
}
};
int main()
{
particle* particles = new particle[10];
double res;
particles[0].x = 60.42;
res = particles[0].square();
return 0;
}
अगर मैं निजी मुझे इस्तेमाल सी ++ प्रोग्राम में एमबर डेटा मैं कणों [0] .setx (60.42) को कॉल करते समय निश्चित रूप से असेंबली में एक और कॉल प्राप्त करता हूं।
क्या इसका मतलब यह है कि मैं सी ++ को सी के रूप में भी चुन सकता हूं क्योंकि वे लगभग उसी असेंबली कोड का उत्पादन करते हैं? क्या मुझे निजी सदस्य डेटा से बचना चाहिए क्योंकि यह अतिरिक्त फ़ंक्शन कॉल जोड़ता है (उदा। असेंबली में कॉल किया जाता है)?
सी ++ सी के मुकाबले ज्यादा प्रदर्शन कर सकता है और आप सी ++ को कैसे कॉल कर रहे हैं? मुझे आश्चर्य है कि यह 'स्क्वायर()' विधि को इनलाइन नहीं करता है अगर वे – Collin
पर हैं, तो कोई बिंदु 'सेटएक्स' विधि नहीं बनाते हैं, यदि केवल एक चीज जो आपके द्वारा पारित की गई है, तो x को सेट कर सकती है डेटा सार्वजनिक। सी ++ का उपयोग करने का मतलब यह नहीं है कि आप केवल सदस्यों के साथ structs का उपयोग नहीं कर सकते हैं। –
यदि आपका एल्गोरिदम संख्याओं के बड़े सरणी के आधार पर है, तो हो सकता है कि आप स्मृति चर के साथ कक्षाओं का उपयोग करना चाहें क्योंकि आपके उदाहरण में स्मृति में कक्षा को कैसे रखा जाता है। आप मिश्रित सदस्य डेटा वाले कक्षाओं के निरंतर आवंटन के बजाय युगल के बड़े निरंतर आवंटन के साथ बेहतर प्रदर्शन देख सकते हैं। – PureW