को देखने के लिए जो डाली तेजी से (आवश्यक बेहतर नहीं है) की कोशिश: नई C++ मामले या पुराने फैशन सी शैली डाली। कोई विचार?जो डाली तेजी static_cast <int>() या पूर्णांक है()
उत्तर
int()
से समतुल्यstatic_cast<int>()
की कार्यक्षमता की तुलना में कोई अंतर नहीं होना चाहिए।
का उपयोग VC2008:
double d = 10.5;
013A13EE fld qword ptr [[email protected] (13A5840h)]
013A13F4 fstp qword ptr [d]
int x = int(d);
013A13F7 fld qword ptr [d]
013A13FA call @ILT+215(__ftol2_sse) (13A10DCh)
013A13FF mov dword ptr [x],eax
int y = static_cast<int>(d);
013A1402 fld qword ptr [d]
013A1405 call @ILT+215(__ftol2_sse) (13A10DCh)
013A140A mov dword ptr [y],eax
जाहिर है, यह 100% ही है!
+1। विधानसभा हमेशा ऐसी चीजों के लिए अच्छा है। – Joey
यह मेरे लिए सेक्सी नहीं दिखता :) एक सेक्सी एक एफएसयू को शामिल किए बिना एसएसई निर्देशों का उपयोग करेगा :) (मैंने सोचा था कि एसएसई का उपयोग पहले ही वीसी में डिफ़ॉल्ट रूप से किया गया था)। – AnT
@AndreyT यह करता है :) उत्तर में कोड डिबगिंग मोड में बनाया गया था। यदि आप इसे अनुकूलन के साथ संकलित करने का प्रयास करते हैं, तो यह एसएसई निर्देशों का उपयोग करता है। – AraK
प्रत्येक विधि का उपयोग करके असेंबली पर एक नज़र डालें। यदि यह एक प्रोफाइलर का उपयोग अलग है।
वे वही हैं जैसे संकलित समय के दौरान इसे हल किया गया है और कोई रनटाइम ओवरहेड नहीं है। यहां तक कि यदि कुछ अंतर था तो भी मैं वास्तव में इन छोटे (सूक्ष्म नहीं) अनुकूलन के बारे में बहुत परेशान नहीं होगा।
कोई फर्क नहीं पड़ता।
जब एक ही कलाकार के रूप में ऐसी मूल संरचनाओं की बात आती है, तो एक बार दो संरचनाओं का अर्थ समान अर्थ होता है, तो उनका प्रदर्शन पूरी तरह से समान होगा, और इन संरचनाओं के लिए उत्पन्न मशीन कोड समान होगा।
जब आप चुनाव कोड के लिए थोड़ा फर्क नहीं पड़ता, मैं एक है जो बाद में प्रोग्रामर के लिए अधिक जाना पहचाना लगता चुनते थे। कोड को दूसरों द्वारा समझना आसान बनाना हमेशा विचार करने लायक है। इस मामले में, मैं उस कारण से int(…)
पर चिपके रहूंगा।
आप क्यों मानेंगे कि int (...) अधिक परिचित होगा, यद्यपि? यह वास्तव में सी में मान्य नहीं है, शायद सी ++ के "छद्म-निर्माता" कॉल के रूप में। - इसके अलावा, कलाकारों के प्रकार के बारे में स्पष्ट नहीं होने के कारण, इसे कोड को समझने में आसान क्यों होना चाहिए? – UncleBens
कास्ट खिलौने के लिए कुछ भी नहीं हैं और इसलिए स्पॉट करना आसान होना चाहिए। सी ++ - शैली कास्ट यही है। संकलन-समय जांच का उल्लेख करने के लिए – foraidt
मुझे विश्वास है कि वास्तविक परिणाम कार्यान्वयन परिभाषित किया गया है। आपको इसे कंपाइलर के अपने संस्करण में देखना चाहिए। लेकिन मेरा मानना है कि यह सबसे आधुनिक कंपाइलरों में एक ही परिणाम देगा। और सी ++ में आपको सी-कास्ट का उपयोग नहीं करना चाहिए, इसके बजाय C++ casts का उपयोग करें - यह आपको संकलन समय पर त्रुटियों को खोजने की अनुमति देगा।
+1 – foraidt
प्रदर्शन समस्याएं कार्यान्वयन-परिभाषित नहीं हैं (वास्तव में मानक कंटेनर संचालन के लिए बड़े-ओ के अलावा किसी भी प्रदर्शन को अनिवार्य नहीं है) –
। युद्ध कहानियों के लिए पढ़ें।
अपने संकलक और प्रोसेसर कोर के विशेष मॉडल जो कार्यक्रम float f; int i(f);
, float f; int i = (int)f;
और float f; int i = static_cast<int>(f);
और उनके जैसे लोग (, डबल लंबी और अहस्ताक्षरित प्रकार को शामिल रूपों सहित) की गति पर निष्पादित करता है पर निर्भर करता है atrociously धीमी गति से हो सकता है - के आदेश आप अपेक्षा से भी बदतर परिमाण। संकलक आंतरिक प्रोसेसर मोड को बदलने वाले निर्देशों को उत्सर्जित कर सकता है जिससे निर्देश पाइपलाइनों को फेंक दिया जा सकता है। यह वास्तव में, कंपाइलर के अनुकूलन तत्व में एक बग है। मैंने उन मामलों को देखा है जहां this analysis में उल्लिखित 40-घड़ी-चक्र लागतों को पीड़ित किया गया है, जिस बिंदु पर आप AFAIK के साथ पूरी तरह से प्रसन्न, मजबूत, सामान्य समाधान के साथ एक प्रमुख, अप्रत्याशित और परेशान प्रदर्शन बाधा डालते हैं। असेंबलर को शामिल करने वाले विकल्प हैं लेकिन AFAIK वे फ़्लोटिंग पॉइंट को गोलियों के समान तरीके से पूर्ण करने के लिए नहीं करते हैं। अगर कोई भी बेहतर जानता है तो मुझे रूचि है। मुझे उम्मीद है कि यह मुद्दा जल्द ही विरासत कंपाइलर्स/हार्डवेयर तक ही सीमित होगा लेकिन आपको अपने बारे में अपनी इच्छाओं की आवश्यकता है।
पीएस मैं उस लिंक तक नहीं पहुंच सकता क्योंकि मेरा फ़ायरवॉल इसे गेम से संबंधित के रूप में अवरुद्ध करता है लेकिन a Google cache of it यह दिखाने के लिए पर्याप्त है कि इसके लेखक इसके बारे में और अधिक जानते हैं।
- 1. डाली चार सरणी पूर्णांक
- 2. जो तेजी से COALESCE या ISNULL है?
- 3. जो तेजी से है: संघ या Concat?
- 4. जो तेजी से है? वक्तव्य या PreparedStatement
- 5. स्थिर डाली बनाम गतिशील डाली
- 6. अद्वितीय पूर्णांक/तेजी से compairson
- 7. कास्ट * टाइप करने के लिए * C++ शैली डाली का उपयोग कर: static_cast या reinterpret_cast
- 8. जो तेजी से asp.net mvc json या json.net है?
- 9. रूबी स्ट्रिंग सर्च: जो तेजी से विभाजित या रेगेक्स है?
- 10. एसक्यूएल सर्वर 'में' या 'या' जो सबसे तेजी से
- 11. क्या static_cast दुरुपयोग किया गया है?
- 12. static_cast बनाम गतिशील_कास्ट
- 13. C++ शैली डाली चार *
- 14. ट्रिगर जो केवल डाली गई पंक्ति
- 15. मेमोरी तुलना, जो तेजी से है?
- 16. पूर्णांक सरणी या संरचना सरणी - जो बेहतर है?
- 17. जो अधिक कुशल, बुनियादी म्यूटेक्स लॉक या परमाणु पूर्णांक है?
- 18. static_cast <int> के साथ गोल करना?
- 19. static_cast अधिभार?
- 20. जो तेजी से, एक्सएमएल फ़ील्ड या वर्चर (अधिकतम) फ़ील्ड डालें?
- 21. static_cast सुरक्षा
- 22. static_cast :: shared_ptr?
- 23. जो तेजी से है - तत्वों की एक छोटी सरणी को सॉर्ट करना या गुणा करना?
- 24. जबकि() डाली
- 25. ऑपरेटर के साथ पूर्णांक पदोन्नति <<
- 26. जावा संग्रह <Object> या संग्रह <?>
- 27. तेजी से क्या है: जेडीबीसी या जेएनडीआई?
- 28. एसक्यूएल सर्वर - अगर डाली संभव है
- 29. <section> या <article>, जो जिसमें
- 30. तेजी से या OR क्या है?
आप हमेशा एक बेंचमार्क स्क्रिप्ट लिख सकते हैं। बस 10 मिलियन static_cast और 10 मिलियन int cast डालें, और देखें कि कौन सा समय लेता है। मेरा * अनुमान * यह है कि वे एक ही असेंबली निर्देश को संकलित करेंगे। – Kip
इस तथ्य को खारिज करते हुए कि वे लगभग सभी संकलकों पर निश्चित रूप से संकलित करते हैं, यह क्यों महत्वपूर्ण होगा? जब तक आप प्रदर्शन के मुद्दों को नहीं जानते हैं, तो आप स्पष्ट होने के लिए लिखते हैं और हार्ड-टू-रीड माइक्रोप्टाइमाइजेशन से बचते हैं जो शायद वैसे भी व्यर्थ हैं। Static_cast() का उपयोग करें। –
सी शैली के कलाकारों को सी ++ स्टाइल कास्ट के संदर्भ में परिभाषित किया गया है (और सी स्टाइल कास्ट निजी आधार पर जा सकते हैं ...)। तो वे वास्तव में काफी समकक्ष हैं। किसी के पास किसी दूसरे पर प्रदर्शन वृद्धि नहीं है। –