Sjlj বনাম বামন বনাম সেহের মধ্যে পার্থক্য কী?


147

আমার প্রকল্পটি সংকলনের জন্য কোন সংকলকটি ব্যবহার করা উচিত তা সিদ্ধান্ত নিতে আমি পর্যাপ্ত তথ্য খুঁজে পাচ্ছি না। বিভিন্ন কম্পিউটারে একটি প্রক্রিয়া অনুকরণ করে বিভিন্ন প্রোগ্রাম রয়েছে। লিনাক্সে, আমি জিসিসি ব্যবহার করছি। সবই দুর্দান্ত। আমি কোডটি অপ্টিমাইজ করতে পারি, এটি দ্রুত সংকলন করে এবং অত বেশি মেমরি ব্যবহার করে না।

আমি এমএসভিসি এবং জিসিসি সংকলকগুলির সাথে নিজস্ব বেনমার্কটি করি। পরে একজন কিছুটা দ্রুত বাইনারি তৈরি করে (প্রতিটি পরাশক্তিটির জন্য)। যদিও সংকলন সময় এমএসভিসির তুলনায় অনেক বেশি।

তাই আমি MinGW ব্যবহার করার সিদ্ধান্ত নিয়েছি। তবে মিনিজিডব্লিউ-তে ব্যতিক্রম হ্যান্ডলিংয়ের পদ্ধতি এবং তাদের বাস্তবায়ন সম্পর্কে কোনও ব্যাখ্যা খুঁজে পাওয়া যায় না। আমি বিভিন্ন অপারেটিং সিস্টেম এবং আর্কিটেকচারের জন্য বিভিন্ন বিতরণ ব্যবহার করতে পারি।

বিবেচ্য বিষয়:

  • সংকলন সময় এবং মেমরি আমার ব্যবহারের জন্য গুরুত্বপূর্ণ নয়। কেবল গুরুত্বপূর্ণ বিষয়টি রানটাইম অপ্টিমাইজেশন। আমার প্রোগ্রামগুলি দ্রুত পর্যাপ্ত হওয়া দরকার। একটি ধীর সংকলক গ্রহণযোগ্য।
  • ওএস: মাইক্রোসফ্ট উইন্ডোজ এক্সপি / 7/8 / লিনাক্স
  • আর্কিটেকচার: ইন্টেল কোর আই 7 / কোর 2 / এবং একটি খুব পুরানো আই 686 চলছে এক্সপি: পি

5
আমি অবাক হয়েছি জিসিসি এমএসভিসির চেয়ে দ্রুত কোড তৈরি করে; গত কয়েক বছরে অবশ্যই জিনিসগুলি পরিবর্তিত হয়েছে ...
ট্রোজানফো ২

19
@ ট্রোজানফয়ে আমাকে অনেক বার বলা হয়েছে মিনিজিডাব্লু এর পরিবর্তে এমএসভিসি ব্যবহার করতে। সবাই এমএসভিসি দ্রুত বলে মনে করে! আমি MinGW 7.2 এবং MSVC 2010 পরীক্ষা করেছি a -O3 -mtune=corei7জিসিসির সাথে কোরি 7 তে এমএসভিসির তুলনায় 45% দ্রুত
sorush-r

5
আমার নিজের অভিজ্ঞতায়, দাবাড়ু মুভ জেনারেটরের সাথে (যা বিটবোর্ড ব্যবহার করত), এমএসভিসি এবং ইন্টেল সি ++ উভয়ই জিসিসি থেকে 10% দ্রুত ছিল, তবে তা 2 বছর আগে ...
ট্রোজানফো

2
@ ওল্ফ সেই সময়টিতে 45% দ্রুত মানে আমার জন্য মৃত্যুদন্ড কার্যকর করার 45% কম সময় ছিল। যদি আমি সঠিকভাবে মনে রাখি তবে আমাদের আণবিক জ্যামিতি মডেলিং সফ্টওয়্যারটির সম্পাদনের সময়টি একটি নির্দিষ্ট পরীক্ষার জন্য 134s (gcc) এবং 194s (msvc) ছিল। তবুও এখন আমি আমার পরিমাপের পদ্ধতিটিকে ভুল এবং অপর্যাপ্ত বলে মনে করি (:
sorush-r

2
@ সুরুশ-আর আমি দেখছি, আপনি গণনা করেছেন (194-134) / 134 যা 45% এর কাছাকাছি, ধন্যবাদ
নেকড়ে

উত্তর:


109

MinGW-w64 উইকিতে একটি সংক্ষিপ্ত ওভারভিউ রয়েছে :

মিংডাব্লু-ডাব্লু 64 জিসিসি বামন -২ ব্যতিক্রম হ্যান্ডলিং সমর্থন করে না কেন?

দ্বার্ফ-2 ই এইচ Windows এর জন্য বাস্তবায়ন 64-বিট উইন্ডোজ অ্যাপ্লিকেশন অধীনে কাজ করতে এ সব ডিজাইন করা হয় না। উইন 32 মোডে, ব্যাতিকালীন আনইন্ড হ্যান্ডলারটি নন-ডিডব্লু 2 সচেতন কোডের মাধ্যমে প্রচার করতে পারে না, এর অর্থ উইন্ডোজ সিস্টেমের ডিএলএল এবং ভিজ্যুয়াল স্টুডিও সহ নির্মিত ডিএলএল সহ কোনও নন-ডিডব্লিউ 2 সচেতন "বিদেশী ফ্রেম" কোডের মধ্য দিয়ে যাওয়া কোনও ব্যর্থতা ব্যর্থ হবে। গিসি-তে বামন -২ আনওয়ন্ডিং কোড x86 আনওয়ানডিং অ্যাসেমব্লিকে পরিদর্শন করে এবং অন্যান্য বামন -২ আনওয়াইন্ড তথ্য ছাড়াই অগ্রসর হতে অক্ষম।

SetJump LongJump উভয় Win32 এবং win64 উপর বেশিরভাগ ক্ষেত্রেই জন্য ব্যতিক্রম হ্যান্ডলিং কাজ পদ্ধতি, সাধারণ সুরক্ষা ফল্ট ছাড়া। ডিজি 2 এবং এসজেএলজে দুর্বলতা কাটিয়ে উঠতে জিসিসিতে স্ট্রাকচার্ড ব্যতিক্রম হ্যান্ডলিং সমর্থন তৈরি করা হচ্ছে। উইন 6464-তে, আনইন্ড-তথ্যগুলি এক্সডাটা-বিভাগে স্থাপন করা হয় এবং স্ট্যাকের পরিবর্তে .pdata (ফাংশন বর্ণনাকারী টেবিল) থাকে। উইন 32 এর জন্য, হ্যান্ডলারের শৃঙ্খলা স্ট্যাকের উপর রয়েছে এবং বাস্তব সম্পাদিত কোডের মাধ্যমে সংরক্ষণ / পুনরুদ্ধার করা দরকার।

ব্যতিক্রম হ্যান্ডলিং সম্পর্কে জিসিসি জিএনইউ :

ব্যতিক্রম হ্যান্ডলিং (EH) এর জন্য দুটি পদ্ধতি সমর্থন করে জিসি:

  • DWARF-2 (DW2) EH , যার জন্য ডিওআরএফ -2 (বা ডিআরএফ -3) ডিবাগিংয়ের তথ্য প্রয়োজন। DW-2 EH এক্সিকিউটেবলকে কিছুটা প্রস্ফুটিত হতে পারে কারণ বৃহত কল স্ট্যাক আনওয়ানডিং টেবিলগুলি এক্সিকিউটেবলের মধ্যে অন্তর্ভুক্ত করতে হয়।
  • সেটজ্যাম্প / লংজ্যাম্প (এসজেএলজে) ভিত্তিক একটি পদ্ধতি । এসজেএলজে-ভিত্তিক ইএইচ ডিডাব্লু 2 ইএইচ থেকে অনেক ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে বেড়ে যায় (কোনও ব্যতিক্রম ছোঁড়া না দেওয়া পর্যন্ত), তবে জিডিসি সহ সংকলিত হয়নি এমন কোডে বা কল-স্ট্যাকের অনাবন্ধিত তথ্য নেই across

[...]

কাঠামোগত ব্যতিক্রম হ্যান্ডলিং (এসইএইচ)

উইন্ডোজ স্ট্রাকচার্ড এক্সসেপশন হ্যান্ডলিং (এসইএইচ) নামে পরিচিত নিজস্ব ব্যতিক্রম হ্যান্ডলিং প্রক্রিয়া ব্যবহার করে। [...] দুর্ভাগ্যক্রমে, জিসিসি এখনও এসইএইচ সমর্থন করে না। [...]

আরো দেখুন:


7
লিঙ্কগুলির জন্য ধন্যবাদ। আমি 32 বিটের জন্য ডিডাব্লু 2 এবং 64-র এসইএইচ ব্যবহার করতে যাচ্ছি। এসইএইচ মাইন্ডবিল্ডস (4.8) এ উপলব্ধ। আমার কি 4.8 এর স্থিতিশীল মুক্তির জন্য অপেক্ষা করা উচিত বা এটি ঠিক আছে? এটি এখানে সংকলিত। আমি বর্তমানে এসইএইচ দিয়ে 4.8 ব্যবহার করে আমার প্রকল্পের নির্ভরতা তৈরি করছি। এখনও কোনও সমস্যা নেই ...
sorush-r

2
সমস্ত নির্ভরতা (বুস্ট লাইব্রেরি, ওপেনএসএসএল, আইসিইউ, ফ্রিগ্লুট) সহ সংকলিত তবে কিউটি শেষ পর্যন্ত প্রচুর অভ্যন্তরীণ সংকলক ত্রুটি রয়েছে। আমি মনে করি আমি স্থির মুক্তির অপেক্ষায় থাকব 4.8
সোরুশ-আর

আপনি কিউটি এর বাইনারি ব্যবহার করেছেন বা আপনি নিজের দ্বারা সংকলন করেছেন?

4
@ ওয়ারোস আমি নিজের কিউটি বিল্ডটি ব্যবহার করি। আমি দেখতে পেয়েছি যে কিউটি বা জিসিসি 4.8 এর সাথে কোনও সমস্যা নেই। এটা আমার অর্ধ-পোড়া র‌্যাম! 1 এখন সবকিছু ঠিকঠাক কাজ করে
sorush-r

82

এসজেএলজে (সেটজ্যাম্প / লংজ্যাম্প): - ৩২ বিট এবং bit৪ বিটের জন্য উপলব্ধ - "শূন্য-ব্যয়" নয়: এমনকি যদি কোনও ব্যতিক্রম ছুঁড়ে না দেওয়া হয়, তবে এটি একটি সামান্য পারফরম্যান্স জরিমানা (exception 15% ব্যতিক্রম ভারী কোড) সহ ব্যতিক্রম করে - যেমন উইন্ডোজ কলব্যাকের মধ্য দিয়ে যেতে

DWARF (DW2, dwarf-2) - শুধুমাত্র 32 বিটের জন্য উপলব্ধ - কোনও স্থায়ী রানটাইম ওভারহেড নেই - পুরো কল স্ট্যাকটি বামন-সক্ষম করার জন্য প্রয়োজন, যার অর্থ ব্যতিক্রমগুলি যেমন উইন্ডোজ সিস্টেমের ডিএলএল ছাড়ানো যায় না।

এসইএইচ (শূন্য ওভারহেড ব্যতিক্রম) - -৪ -বিট জিসিসি ৪.৮ এর জন্য উপলব্ধ।

উত্স: http://qt-project.org/wiki/MinGW-64-bit


2
দুঃখিত, উত্স লিঙ্ক যুক্ত করা হয়েছে।

2
আপনার উত্তরের জন্য ধন্যবাদ;)
sorush-r

14
সুতরাং এখন 2016 সালে আমরা এই প্রশ্নটি বিশ্রামে রাখতে পারি এবং কেবল সর্বদা এসইএইচ ব্যবহার করতে পারি।
রুস্টেক্স

6
@ রুস্টিক্স কেবলমাত্র যদি আপনার টার্গেট x86_64 হয়
সোহনারিয়াং

এক্স 86 এর জন্য বামন?
বাংলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.