वास्तव में, यदि आपके कोड कुछ नहीं करता है, तो यह और भी उचित संकलक अभी भी एक निष्पादन योग्य बनाता है? ;-)
ठीक है, विंडोज़ पर किसी भी निष्पादन योग्य के पास अभी भी आकार होगा, हालांकि यह उचित छोटा हो सकता है। पुराने एमएस-डॉस सिस्टम के साथ, एक पूर्ण काम-रहित एप्लिकेशन केवल कुछ बाइट्स होगा। (मुझे लगता है कि कार्यक्रम को बंद करने के लिए 21h बाधा का उपयोग करने के लिए चार बाइट्स।) फिर, उन अनुप्रयोगों को सीधे स्मृति में लोड किया गया था। जब EXE प्रारूप अधिक लोकप्रिय हो गया, चीजें थोड़ा बदल गईं। अब निष्पादन योग्यों के पास प्रक्रिया के बारे में अतिरिक्त जानकारी थी, जैसे कि कोड और डेटा सेगमेंट के स्थानांतरण और कुछ चेकसम और संस्करण जानकारी। विंडोज़ के परिचय ने प्रारूप में एक और शीर्षलेख जोड़ा, एमएस-डॉस को बताने के लिए कि यह निष्पादन योग्य निष्पादित नहीं कर सका क्योंकि इसे विंडोज के तहत चलाने की आवश्यकता है। और विंडोज बिना किसी समस्या के इसे पहचानेंगे। बेशक, निष्पादन योग्य प्रारूप को संसाधन जानकारी, जैसे कि बिटमैप्स, आइकन और संवाद रूपों और बहुत कुछ के साथ भी बढ़ाया गया था।
आपके कंपाइलर और उसके आकार को कम करने के लिए उपयोग की जाने वाली प्रत्येक विधि के आधार पर आजकल कुछ भी निष्पादन योग्य आकार में 4 और 8 किलोबाइट्स के बीच नहीं होगा। यह एक ऐसे आकार में होगा जहां यूपीएक्स वास्तव में बड़े निष्पादन योग्य परिणाम देगा! आपके निष्पादन योग्य में अतिरिक्त बाइट जोड़े जा सकते हैं क्योंकि आपने अपने कोड में कुछ लाइब्रेरी जोड़े हैं। प्रारंभिक डेटा या संसाधनों के साथ विशेष रूप से पुस्तकालयों में बाइट्स की काफी मात्रा में वृद्धि होगी। डीबग जानकारी जोड़ने से निष्पादन योग्य आकार भी बढ़ जाता है।
लेकिन जब यह सब आकार घटाने पर अच्छा अभ्यास करता है, तो आप सोच सकते हैं कि अनुप्रयोगों की सूजन के बारे में चिंता करना जारी रखना व्यावहारिक है या नहीं। आधुनिक हार्ड डिस्क सेगमेंट में फ़ाइलों को विभाजित किया जाएगा और वास्तव में बड़ी डिस्क के लिए, अंतर बहुत छोटा होगा। हालांकि, जितना संभव हो उतना छोटा आकार रखने के लिए जो परेशानी होगी, वह विकास की गति को धीमा कर देगी, जब तक कि आप एक विशेषज्ञ डेवलपर नहीं हैं जिसका उपयोग इन अनुकूलन में किया जाता है। इस प्रकार के अनुकूलन प्रदर्शन को बेहतर बनाने और अधिकांश प्रणालियों की औसत डिस्क स्थान पर विचार करने में प्रवृत्त नहीं होते हैं, मुझे नहीं लगता कि यह व्यावहारिक क्यों होगा। (फिर भी, मैं अपने स्वयं के कोड को समान तरीकों से अनुकूलित करता हूं लेकिन फिर, मुझे इन अनुकूलन के साथ अनुभव होता है।)
EXE header में रूचि है? यह "मार्क ज़बिकोव्स्की" के लिए एमजेड अक्षरों से शुरू होता है।पहला भाग एक्जिक्यूटिव के लिए पुरानी शैली के एमएस-डॉस हेडर है और एमएस-डॉस के स्टब के रूप में प्रयोग किया जाता है कि यह प्रोग्राम
एक एमएस-डॉस निष्पादन योग्य नहीं है। (बाइनरी में, आप टेक्स्ट 'यह प्रोग्राम डॉस मोड में नहीं चलाया जा सकता है।' मूल रूप से यह सब करता है: उस संदेश को प्रदर्शित करना। अगला पीई हेडर है, जो विंडोज एमएस-डॉस के बजाय पहचान और उपयोग करेगा हेडर। यह
PE for Portable Executable अक्षरों से शुरू होता है। इस दूसरे हेडर के बाद निष्पादन योग्य स्वयं होगा, कोड और डेटा के कई ब्लॉक में विभाजित होगा। हेडर में विशेष पुनर्विक्रय सारणी होती है जो ओएस को एक विशिष्ट ब्लॉक लोड करने के लिए कहती है। और यदि आप कर सकते हैं एक सीमा तक इस रखने के लिए, अंतिम निष्पादन योग्य 4 KB से कम हो सकता है लेकिन 90% तो हेडर सूचना और कोई कार्यक्षमता होगा।
एक सुझाव: क्या आपको जीसीसी के मिनीजीडब्ल्यू बिल्डिंग का उपयोग करके एक ही परिणाम मिलते हैं? मुझे यकीन नहीं है कि वह आकार असामान्य है या नहीं, क्योंकि मुझे सी ++ का बहुत उपयोग नहीं किया जाता है। – Macha
यूपीएक्स? http://upx.sourceforge.net/ – bobince
हाँ, मुझे यूपीएक्स पता है, लेकिन यहां समस्या यह है: संकलक को एक खाली कार्यक्रम के लिए ~ 23 केबी जंक उत्पन्न नहीं करना चाहिए। – George