सी ++ के लिए मेयर बाधा डिस्क I/O है। कई शीर्षकों में अन्य शीर्षलेखों को पीछे और आगे शामिल किया जाता है, जिससे कई फाइलें खोली जा सकती हैं और प्रत्येक संकलन इकाई के लिए पढ़ी जाती हैं।
यदि आप स्रोतों को रैम-डिस्क में ले जाते हैं तो आप महत्वपूर्ण सुधार तक पहुंच सकते हैं। और भी अधिक यदि आप सुनिश्चित करते हैं कि आपकी स्रोत फ़ाइलें बिल्कुल एक बार पढ़ती हैं।
तो नई परियोजनाओं के लिए मैं एक एकल फाइल मैं _.cpp
फोन में सब कुछ शामिल करने के लिए शुरू कर दिया। इसकी संरचना इस तरह है:
/* Standard headers */
#include <vector>
#include <cstdio>
//...
/* My global macros*/
#define MY_ARRAY_SIZE(X) (sizeof(X)/sizeof(X[0]))
// My headers
#include "foo.h"
#include "bar.h"
//...
// My modules
#include "foo.cpp"
#include "bar.cpp"
और मैं केवल इस एकल फ़ाइल को संकलित करता हूं।
मेरे हेडर और स्रोत फ़ाइलें कुछ भी शामिल नहीं है, और अन्य मॉड्यूल के साथ संघर्ष से बचने के लिए नामस्थान का उपयोग करें।
जब भी मेरा कार्यक्रम कुछ याद करते हैं, मैं इस मॉड्यूल केवल में अपने शीर्षक और स्रोत जोड़ें।
इस तरह प्रत्येक स्रोत फ़ाइल और शीर्षलेख बिल्कुल एक बार पढ़ा जाता है, और बहुत तेज़ी से बनाता है। संकलन समय केवल रैखिक रूप से बढ़ते हैं क्योंकि आप अधिक फाइलें जोड़ते हैं, लेकिन चौकोर रूप से नहीं। मेरा शौक परियोजना लगभग 40000 लोक और 500 मॉड्यूल है लेकिन अभी भी लगभग 10-20 सेकंड संकलित है। यदि मैं सभी स्रोतों और शीर्षकों को रैम-डिस्क संकलन समय में ले जाता हूं तो 3 सेकंड तक कम हो जाता है।
इसका नुकसान, मौजूदा कोडबेस इस योजना का उपयोग करने के लिए प्रतिक्रिया करने में काफी मुश्किल हैं।
असल में यह भाषा-अज्ञेयवादी नहीं है। विभिन्न भाषाओं में एक कंपाइलर के लिए अलग-अलग आवश्यकताएं होती हैं, जो संकलित समय को महत्वपूर्ण रूप से प्रभावित करती हैं, –
सच है, लेकिन मेरा प्रश्न विभिन्न कंपाइलर्स, वातावरण, भाषाओं आदि में प्रदर्शन को बेहतर बनाने के तरीके से अधिक है .. मैं आमतौर पर विजुअल स्टूडियो का उपयोग करता हूं, लेकिन कभी-कभी msbuild, perl , आदि .. – esac