c++ - एसजेएलजे बनाम बौने बनाम सेह के बीच क्या अंतर है?




compiler-construction mingw (2)

मुझे यह तय करने के लिए पर्याप्त जानकारी नहीं मिल रही है कि मैं अपने प्रोजेक्ट को संकलित करने के लिए किस कंपाइलर का उपयोग करूँ। एक प्रक्रिया अनुकरण विभिन्न कंप्यूटरों पर कई कार्यक्रम हैं। लिनक्स पर, मैं जीसीसी का उपयोग कर रहा हूं। प्रत्येक वस्तु उत्तम हैं। मैं कोड अनुकूलित कर सकता हूं, यह तेजी से संकलित करता है और बहुत अधिक स्मृति का उपयोग नहीं करता है।

मैं एमएसवीसी और जीसीसी कंपाइलर्स के साथ अपना खुद का बेंचमार्क करता हूं। बाद में एक तेजी से तेज द्विआधारी पैदा करता है (प्रत्येक subarchitecture के लिए)। हालांकि संकलन समय एमएसवीसी से कहीं अधिक है।

तो मैंने मिनजीडब्ल्यू का उपयोग करने का फैसला किया। लेकिन अपवाद हैंडलिंग विधियों और MinGW में उनके कार्यान्वयन के बारे में कोई स्पष्टीकरण नहीं मिल रहा है। मैं विभिन्न ऑपरेटिंग सिस्टम और आर्किटेक्चर के लिए विभिन्न वितरण का उपयोग कर सकता हूं।

बातें:

  • मेरे उपयोग के लिए संकलन समय और स्मृति महत्वपूर्ण नहीं हैं। केवल महत्वपूर्ण बात रनटाइम अनुकूलन है। मुझे अपने कार्यक्रमों को पर्याप्त तेज़ होने की आवश्यकता है। एक धीमी संकलक स्वीकार्य है।
  • ओएस: माइक्रोसॉफ्ट विंडोज एक्सपी / 7/8 / लिनक्स
  • वास्तुकला: इंटेल कोर i7 / Core2 / और एक बहुत पुराना i686 चल रहा XP: पी

एसजेएलजे ( setjmp / longjmp): - 32 बिट और 64 बिट के लिए उपलब्ध - "शून्य-लागत" नहीं: यहां तक ​​कि यदि कोई अपवाद नहीं फेंक दिया जाता है, तो यह मामूली प्रदर्शन जुर्माना लगाता है (अपवाद भारी कोड में ~ 15%) - अपवादों की अनुमति देता है जैसे विंडोज कॉलबैक के माध्यम से पार करने के लिए

डीडब्ल्यूएआरएफ (डीडब्ल्यू 2, बौना -2) - केवल 32 बिट के लिए उपलब्ध है - कोई स्थायी रनटाइम ओवरहेड नहीं - पूरे कॉल स्टैक को बौने-सक्षम होने की आवश्यकता है, जिसका अर्थ है कि विंडोज सिस्टम डीएलएल जैसे अपवादों को फेंक नहीं दिया जा सकता है।

एसईएच (शून्य ओवरहेड अपवाद) - 64-बिट जीसीसी 4.8 के लिए उपलब्ध होगा।

स्रोत: http://qt-project.org/wiki/MinGW-64-bit


MinGW-w64 विकी पर एक संक्षिप्त अवलोकन है:

Mingw-w64 gcc समर्थन dwarf-2 अपवाद हैंडलिंग क्यों नहीं करता है?

विंडोज़ के लिए बौना -2 ईएच कार्यान्वयन 64-बिट विंडोज अनुप्रयोगों के तहत काम करने के लिए बिल्कुल डिज़ाइन नहीं किया गया है। Win32 मोड में, असाधारण हैंडलर गैर-dw2 जागरूक कोड के माध्यम से प्रचार नहीं कर सकता है, इसका मतलब यह है कि किसी भी गैर-dw2 जागरूक "विदेशी फ्रेम" कोड के माध्यम से कोई भी अपवाद विफल हो जाएगा, जिसमें विंडोज सिस्टम डीएलएल और डीएलएल विजुअल स्टूडियो के साथ बनाया गया है। जीसीसी में बौना-2 अवांछित कोड x86 अनचाहे असेंबली का निरीक्षण करता है और अन्य बौने-2 जानकारी के बिना आगे बढ़ने में असमर्थ है।

सामान्य संरक्षण दोषों को छोड़कर, Win32 और Win64 दोनों के अधिकांश मामलों के लिए अपवाद हैंडलिंग की सेटजंप लॉन्गजंप विधि काम करती है। जीसीसी में संरचित अपवाद हैंडलिंग समर्थन dw2 और sjlj की कमजोरियों को दूर करने के लिए विकसित किया जा रहा है। Win64 पर, अवांछित जानकारी xdata-section में रखी जाती है और स्टैक के बजाय .pdata (फ़ंक्शन डिस्क्रिप्टर टेबल) होती है। Win32 के लिए, हैंडलर की श्रृंखला ढेर पर है और वास्तविक निष्पादित कोड द्वारा सहेजा / बहाल करने की आवश्यकता है।

अपवाद हैंडलिंग के बारे में जीसीसी जीएनयू :

जीसीसी अपवाद हैंडलिंग (ईएच) के लिए दो तरीकों का समर्थन करता है:

  • डीडब्ल्यूएआरएफ -2 (डीडब्ल्यू 2) ईएच , जिसके लिए डीडब्ल्यूएआरएफ -2 (या डीडब्ल्यूएआरएफ -3) डीबगिंग जानकारी के उपयोग की आवश्यकता है। डीडब्ल्यू -2 ईएच निष्पादन योग्यों को थोड़ा फूला हुआ हो सकता है क्योंकि बड़ी कॉल स्टैक अनदेखी तालिकाओं को वें निष्पादन योग्य में शामिल किया जाना चाहिए।
  • Setjmp / longjmp (SJLJ) पर आधारित एक विधि। एसजेएलजे-आधारित ईएच डीडब्ल्यू 2 ईएच से बहुत धीमी है (जब कोई अपवाद नहीं फेंक दिया जाता है तो सामान्य निष्पादन को दंडित करता है), लेकिन जीसीसी के साथ संकलित नहीं किया गया है या उसमें कॉल-स्टैक अनचाहे जानकारी नहीं है।

[...]

संरचित अपवाद हैंडलिंग (एसईएच)

विंडोज़ अपने स्वयं के अपवाद हैंडलिंग तंत्र का उपयोग करता है जिसे संरचित अपवाद हैंडलिंग (एसईएच) कहा जाता है। [...] दुर्भाग्य से, जीसीसी अभी तक एसईएच का समर्थन नहीं करता है। [...]

यह भी देखें:





mingw-w64