मैंने अंतहीनता के बारे में अनगिनत संदर्भ और इसका क्या अर्थ देखा है। मुझे इसके बारे में कोई समस्या नहीं है ... हालांकि, मेरी कोडिंग प्रोजेक्ट मानक "गेमर" हार्डवेयर पर लिनक्स और विंडोज़ पर चलाने के लिए एक साधारण गेम है। क्या मुझे इस मामले में अंतहीनता के बारे में चिंता करने की ज़रूरत है? मुझे इसके बारे में चिंता करने की आवश्यकता कब होगी? मेरा कोड सरल सी और एसडीएल + जीएल है, केवल जटिल डेटा मूल मीडिया फाइलें हैं (पीएनजी + वाव + एक्सएम) और गेम डेटा ज्यादातर तार, पूर्णांक बूलियन (झंडे और ऐसे) और स्थैतिक आकार के सरणी हैं। अभी तक किसी भी उपयोगकर्ता के पास कोई समस्या नहीं है, इसलिए मैं सोच रहा हूं कि चेक जोड़ना आवश्यक है (बाद में किया जाएगा, लेकिन आईएमओ के लिए अधिक जरूरी मुद्दे हैं)।अंतहीनता के बारे में चिंता कब करें?
उत्तर
आप "मानक गेमर हार्डवेयर" द्वारा एक पीसी मतलब है, तो आप endianness बारे में चिंता करने के रूप में यह हमेशा 86/64 पर थोड़ा endian हो जाएगा नहीं है। लेकिन अगर आप परियोजना को अन्य आर्किटेक्चर में बंद करना चाहते हैं, तो आपको इसे स्वतंत्रता-स्वतंत्र रूप से डिजाइन करना चाहिए।
यह एंडियन मुद्दों के सबसे महत्वपूर्ण क्षेत्र पर चमक रहा है: नेटवर्क प्रोग्रामिंग। मल्टी-बाइट मान (जैसे int या long) भेजते समय हमेशा होस्ट और नेटवर्क बाइट ऑर्डर के बीच कनवर्ट करें। – gnud
अच्छा बिंदु, प्रोग्रामिंग सॉकेट करते समय आपको 'हटन' और इसी तरह के कार्यों का उपयोग करना होगा। लेकिन आप आमतौर पर उन पुस्तकालयों का उपयोग करेंगे जो इन मतभेदों को दूर करते हैं। – AndiDog
@gnud: नहीं, यह गलत है। यदि आप उम्मीद करते हैं कि आपके सभी सर्वर और क्लाइंट छोटे-छोटे होंगे, तो प्रारूप या प्रोटोकॉल को परिभाषित करना सुविधाजनक है जिसमें छोटे-एंडियन मल्टी-बाइट मान शामिल हैं। ऐसा तब होता है जब नेटवर्क पर ज़िप फ़ाइल भेजी जाती है, क्योंकि पीकेजेआईपी में जादू संख्याएं और आकार छोटे-अंत हैं, न कि नेटवर्क ऑर्डर। यह अभी तक दुर्घटनाग्रस्त नहीं हुआ है।यदि आपको कभी भी एक बड़े-एंडियन क्लाइंट या सर्वर की आवश्यकता है, तो आप सुरक्षित रूप से बाइट-स्वैप कर सकते हैं। आईपी पते और बंदरगाहों को निर्दिष्ट करने के लिए 'हटन' की आवश्यकता है, और एंडियन-सुरक्षित डेटा प्रारूपों को निर्दिष्ट करने का एक सुविधाजनक तरीका है, लेकिन यह एकमात्र तरीका नहीं है। –
आप केवल अपने खेल अलग हार्डवेयर आर्किटेक्चर पर चलाने के लिए आवश्यक है या नहीं इसके बारे में चिंता करने की जरूरत है। यदि आप सकारात्मक हैं कि यह हमेशा इंटेल हार्डवेयर पर चलता रहेगा तो आप इसके बारे में भूल सकते हैं। यदि यह लिनक्स पर चलेगा हालांकि कई लोग इंटेल की तुलना में विभिन्न आर्किटेक्चर का उपयोग करते हैं और आप इसके बारे में सोचने के लिए समाप्त हो सकते हैं।
इसके अतिरिक्त यह केवल तभी महत्वपूर्ण है जब आप कंप्यूटर के बीच डेटा का आदान-प्रदान करते हैं या जब आप बाइनरी प्रारूप में डेटा संग्रहीत करते हैं। –
@Georg आह अच्छा बिंदु। मैं इसका उल्लेख करना भूल गया था। – Cromulent
या जब आप डेटा को क्रमशः स्थानांतरित करते हैं और आपको चुनना होगा कि कौन सा बाइट पहले भेजना है। – JustJeff
क्या आप स्रोत कोड फ़ॉर्म में गेम वितरित कर रहे हैं?
क्योंकि अगर आप आप केवल एक द्विआधारी के रूप में खेल का वितरण कर रहे हैं, तो आप वास्तव में पता है जो प्रोसेसर परिवारों के लिए अपने खेल पर चलेंगे। साथ ही, मीडिया फाइलें, क्या वे उपयोगकर्ता उत्पन्न होते हैं (संभवतः एक स्तर संपादक के माध्यम से) या क्या वे वास्तव में केवल आपके द्वारा आपूर्ति की जाने वाली मानसिकता हैं?
यदि यह वास्तव में बंद वातावरण है (आपकी वितरित द्विआधारी और गेम संपत्तियों को अनुकूलित करने का इरादा नहीं है) तो आप अंत में लोगों के लिए अपने जोखिमों को जानते हैं और मैं व्यक्तिगत रूप से इसके साथ मूर्ख नहीं हूं।
हालांकि, अगर आप या तो स्रोत वितरण और/या उम्मीद कर लोगों को अपने खेल को अनुकूलित करेंगे रहे हैं, तो आप चिंता का विषय के लिए एक संभावित है। हालांकि, इन दिनों के आसपास के अधिकांश डेस्कटॉप/लैपटॉप कंप्यूटरों के साथ x86 पर जाने के साथ मुझे लगता है कि यह एक कम चिंता का विषय है।
मेरे पास जानबूझकर उपयोगकर्ताओं को लेने/संपादित/संशोधित/सामग्री जोड़ने के लिए डेटा फ़ाइलों को "बस बाहर रखना" है। स्तर एक संपादक का उपयोग करते हैं लेकिन आउटपुट एक बीज और एक लंबी स्ट्रिंग फिर से होती है (मैं थोड़ी देर के लिए उपयोग किया जाता है)। शेष प्रक्रियात्मक है। मान लीजिए कि अधिकांश उपयोगकर्ता स्पर्श करेंगे संस्करण Win32 एक होगा, जिसे वितरण समय पर प्रीकंपल किया जाएगा। (केवल उपाख्यान के रूप में मैंने लिनक्स या स्रोत निर्माण का उपयोग किया है) आपके उत्तर के लिए धन्यवाद। – GAKOKO
समस्या नेटवर्किंग और कैसे डेटा नहीं भेजा जाता है और जब आप अलग प्रोसेसर पर नगण्य के बाद से विभिन्न प्रोसेसर स्मृति में अलग ढंग से डाटा स्टोर कर सकते हैं बिट कर रहे हैं के साथ होता है।
जब भी आप प्राप्त/एक नेटवर्क से डेटा संचारित, याद करने के लिए/परिवर्तित करने के लिए नेटवर्क और होस्ट बाइट क्रम से। सी फ़ंक्शन htons
, htonl
आदि, या आपकी भाषा में समकक्ष, का उपयोग यहां किया जाना चाहिए।
जब भी आप फ़ाइल से बहु-बाइट मान (जैसे यूटीएफ -16 वर्ण या 32 बिट इन्ट्स) पढ़ते हैं, तब से वह फ़ाइल अलग-अलग अंतःस्थापितता वाले सिस्टम पर उत्पन्न हो सकती है। अगर फ़ाइल यूटीएफ 16 या 32 है तो शायद यह एक बीओएम (बाइट ऑर्डर मार्क) है। अन्यथा, फ़ाइल प्रारूप को किसी भी तरह से अंतहीनता निर्दिष्ट करना होगा।
मेरा मानना है कि पावर पीसी में इंटेल बोर्डों की विपरीत अंतहीनता है। हो सकता है कि एक दिनचर्या हो सके जो आर्किटेक्चर पर निर्भर अंत्येष्टि सेट कर सके? मुझे यकीन नहीं है कि क्या आप वास्तव में बता सकते हैं कि हार्डवेयर आर्किटेक्चर कोड में क्या है ... हो सकता है कि कोई मुझे समझदार हो तो मुझे उस प्रश्न का उत्तर पता चलेगा।
अब आपके कथन "मानक" गेमर एच/डब्ल्यू के संदर्भ में, मैं कहूंगा कि आम तौर पर आप उपभोक्ता बंद शेल्फ समाधानों को देखने जा रहे हैं वास्तव में कोई भी मानक गेमर उपयोग कर रहा है, तो आप लगभग जा रहे हैं निश्चित रूप से बोर्ड में एक ही एंडियन प्राप्त करने के लिए। मुझे यकीन है कि कोई मेरे साथ असहमत होगा लेकिन यह मेरा $ है।02
हा ... मैंने अभी देखा है कि एक लिंक है जो ऊपर दिए गए सुझाव से संबंधित है।
बार जब आप endianess के बारे में चिंता करने की जरूरत:
- आप मशीनों या प्रक्रियाओं के बीच बाइनरी डेटा भेज रहे हैं (एक नेटवर्क या फ़ाइल का उपयोग)। यदि मशीनों में अलग बाइट ऑर्डर हो सकता है या प्रोटोकॉल का इस्तेमाल एक विशेष बाइट ऑर्डर (जो इसे करना चाहिए) निर्दिष्ट करता है, तो आपको अंतहीनता से निपटने की आवश्यकता होगी।
- आपके पास कोड है जो विभिन्न प्रकार के पॉइंटर्स के रूप में स्मृति तक पहुंचता है (कहें कि
char*
के माध्यम से आपunsigned int
चर का उपयोग करते हैं)।
आप इन बातों को आप बाइट क्रम के साथ काम कर रहे हैं कि क्या आप जानते हैं या नहीं करते हैं - यह हो सकता है कि आप यह सोचते हैं कि यह एक ही रास्ता या अन्य, जो ठीक रूप में लंबे समय से काम कर सकते है द्वारा यह साथ काम कर रहे क्योंकि आपके कोड को एक अलग मंच से निपटने की ज़रूरत नहीं है।
इसी तरह से, आपको आम तौर पर उन मामलों में और इसी कारणों से संरेखण के मुद्दों से निपटने की आवश्यकता होती है। एक बार फिर, आप कुछ भी नहीं कर रहे हैं और सब कुछ ठीक काम कर रहे हैं क्योंकि आपको प्लेटफॉर्म सीमाएं पार करने की ज़रूरत नहीं है (जो कि यदि आवश्यकता हो तो सड़क पर आपको काटने के लिए वापस आ सकता है)।
- 1. मुझे आईओएस एप्लिकेशन में थ्रेड-सुरक्षा के बारे में चिंता करने की आवश्यकता कब है?
- 2. ब्राउज़र के बारे में देखभाल करना कब बंद करें
- 3. अंडरस्कोर.जेएस में एसिंक या सिंक होने के कार्यों के बारे में कुछ चिंता
- 4. क्या मुझे पायथन में परिपत्र संदर्भों के बारे में चिंता करनी चाहिए?
- 5. क्या मुझे std :: vector के साथ स्मृति विखंडन के बारे में चिंता करनी चाहिए?
- 6. साइट एडिट के साथ दो अलग-अलग वेबसाइटों पर प्रकाशन के बारे में चिंता
- 7. आपको थ्रेड सुरक्षा के बारे में चिंता करने की ज़रूरत है?
- 8. क्या आपको वेबसाइट पर नकली खाते/लॉगिन के बारे में चिंता करनी चाहिए?
- 9. log4net: गतिशील रूप से लॉगर बनाना, क्या मुझे किसी चीज़ के बारे में चिंता करनी चाहिए?
- 10. फ़ाइल अपलोड सुरक्षा चिंता
- 11. बाइनरी बनाम पाठ मोड में फ़ाइल ऑपरेशन - प्रदर्शन चिंता
- 12. एमवीसी - चिंता का पृथक्करण
- 13. मुझे std :: iostream :: sentry के साथ खुद को कब चिंता करनी चाहिए?
- 14. स्केलिंग के बारे में सोचने के लिए एक अच्छा समय कब है?
- 15. एमएस विजुअल सी ++: कॉलिंग सम्मेलनों का उपयोग करने के बारे में आपको कब परवाह करना चाहिए?
- 16. रेल: चिंता के अंदर बाहरी वर्ग का नाम प्राप्त करें
- 17. एक crosscutting चिंता
- 18. node.js से संबंधित चिंता
- 19. 8-बिट फ़ील्ड में अंतहीनता क्यों होती है?
- 20. आईओएस - एसओएपी अनुरोध कैसे करें और चिंता प्रतिक्रिया प्राप्त करें
- 21. "उपयोग" निर्माण के बारे में मूल
- 22. के बारे में C++
- 23. के बारे में * argv []
- 24. रेंडरस्क्रिप्ट के बारे में
- 25. एक ActiveSupport में एक विधि ओवरलोडिंग :: चिंता
- 26. डब्ल्यूपीएफ त्वचा स्किनिंग सुरक्षा चिंता
- 27. विंडोज इवेंट्स के बारे में प्रश्न
- 28. क्या websafe के बारे में रंग
- 29. बहु थ्रेडिंग के बारे में
- 30. रेल 3 मॉडल के लिए चिंता मॉड्यूल
इस प्रश्न ने मुझे देर से जनरल कस्टर की याद दिला दी। निश्चित रूप से क्यों नहीं ... – KristoferA
स्ट्रिंग्स (संसाधन फ़ाइलों से) एक समस्या हो सकती है, यदि आप यूटीएफ -16 जैसे एन्कोडिंग का उपयोग कर रहे हैं, जहां प्रत्येक मूल मान> 1 बाइट है। – gnud
आपके उत्तरों के लिए धन्यवाद। यह वास्तव में खुला स्रोत है लेकिन ज्यादातर पारंपरिक पीसी हार्डवेयर पर चलने की उम्मीद है (सभी ईमानदारी में मैं सिर्फ लिनक्स संस्करण करता हूं क्योंकि यह मेरा मुख्य ओएस है और मेरे पास वर्कलोड करने में आसान समय है) ... मूल रूप से x86। कोई नेटवर्क डेटा नहीं है और सहेजने वाली फ़ाइलें बहुत ही सरल लंबी तार हैं (मैं "हैक रक्षा को बचाने" नहीं जोड़ रहा हूं ... खिलाड़ी आखिरकार फैसला करता है और वे वैसे भी धोखा देंगे)। गेम डेटा संपादित या उपयोगकर्ताओं द्वारा लिया जाने वाला खुला है। इसका मतलब है कि मैक का उपयोग करने या चित्र जोड़ने के लिए मैक का उपयोग करने से कोई दुर्घटना या बदतर हो सकता है? (कोई स्पष्ट क्रैश/डीबग आउटपुट के साथ त्रुटियां) – GAKOKO