2010-02-06 15 views
8

मैंने अंतहीनता के बारे में अनगिनत संदर्भ और इसका क्या अर्थ देखा है। मुझे इसके बारे में कोई समस्या नहीं है ... हालांकि, मेरी कोडिंग प्रोजेक्ट मानक "गेमर" हार्डवेयर पर लिनक्स और विंडोज़ पर चलाने के लिए एक साधारण गेम है। क्या मुझे इस मामले में अंतहीनता के बारे में चिंता करने की ज़रूरत है? मुझे इसके बारे में चिंता करने की आवश्यकता कब होगी? मेरा कोड सरल सी और एसडीएल + जीएल है, केवल जटिल डेटा मूल मीडिया फाइलें हैं (पीएनजी + वाव + एक्सएम) और गेम डेटा ज्यादातर तार, पूर्णांक बूलियन (झंडे और ऐसे) और स्थैतिक आकार के सरणी हैं। अभी तक किसी भी उपयोगकर्ता के पास कोई समस्या नहीं है, इसलिए मैं सोच रहा हूं कि चेक जोड़ना आवश्यक है (बाद में किया जाएगा, लेकिन आईएमओ के लिए अधिक जरूरी मुद्दे हैं)।अंतहीनता के बारे में चिंता कब करें?

+0

इस प्रश्न ने मुझे देर से जनरल कस्टर की याद दिला दी। निश्चित रूप से क्यों नहीं ... – KristoferA

+0

स्ट्रिंग्स (संसाधन फ़ाइलों से) एक समस्या हो सकती है, यदि आप यूटीएफ -16 जैसे एन्कोडिंग का उपयोग कर रहे हैं, जहां प्रत्येक मूल मान> 1 बाइट है। – gnud

+0

आपके उत्तरों के लिए धन्यवाद। यह वास्तव में खुला स्रोत है लेकिन ज्यादातर पारंपरिक पीसी हार्डवेयर पर चलने की उम्मीद है (सभी ईमानदारी में मैं सिर्फ लिनक्स संस्करण करता हूं क्योंकि यह मेरा मुख्य ओएस है और मेरे पास वर्कलोड करने में आसान समय है) ... मूल रूप से x86। कोई नेटवर्क डेटा नहीं है और सहेजने वाली फ़ाइलें बहुत ही सरल लंबी तार हैं (मैं "हैक रक्षा को बचाने" नहीं जोड़ रहा हूं ... खिलाड़ी आखिरकार फैसला करता है और वे वैसे भी धोखा देंगे)। गेम डेटा संपादित या उपयोगकर्ताओं द्वारा लिया जाने वाला खुला है। इसका मतलब है कि मैक का उपयोग करने या चित्र जोड़ने के लिए मैक का उपयोग करने से कोई दुर्घटना या बदतर हो सकता है? (कोई स्पष्ट क्रैश/डीबग आउटपुट के साथ त्रुटियां) – GAKOKO

उत्तर

2

आप "मानक गेमर हार्डवेयर" द्वारा एक पीसी मतलब है, तो आप endianness बारे में चिंता करने के रूप में यह हमेशा 86/64 पर थोड़ा endian हो जाएगा नहीं है। लेकिन अगर आप परियोजना को अन्य आर्किटेक्चर में बंद करना चाहते हैं, तो आपको इसे स्वतंत्रता-स्वतंत्र रूप से डिजाइन करना चाहिए।

+6

यह एंडियन मुद्दों के सबसे महत्वपूर्ण क्षेत्र पर चमक रहा है: नेटवर्क प्रोग्रामिंग। मल्टी-बाइट मान (जैसे int या long) भेजते समय हमेशा होस्ट और नेटवर्क बाइट ऑर्डर के बीच कनवर्ट करें। – gnud

+0

अच्छा बिंदु, प्रोग्रामिंग सॉकेट करते समय आपको 'हटन' और इसी तरह के कार्यों का उपयोग करना होगा। लेकिन आप आमतौर पर उन पुस्तकालयों का उपयोग करेंगे जो इन मतभेदों को दूर करते हैं। – AndiDog

+0

@gnud: नहीं, यह गलत है। यदि आप उम्मीद करते हैं कि आपके सभी सर्वर और क्लाइंट छोटे-छोटे होंगे, तो प्रारूप या प्रोटोकॉल को परिभाषित करना सुविधाजनक है जिसमें छोटे-एंडियन मल्टी-बाइट मान शामिल हैं। ऐसा तब होता है जब नेटवर्क पर ज़िप फ़ाइल भेजी जाती है, क्योंकि पीकेजेआईपी में जादू संख्याएं और आकार छोटे-अंत हैं, न कि नेटवर्क ऑर्डर। यह अभी तक दुर्घटनाग्रस्त नहीं हुआ है।यदि आपको कभी भी एक बड़े-एंडियन क्लाइंट या सर्वर की आवश्यकता है, तो आप सुरक्षित रूप से बाइट-स्वैप कर सकते हैं। आईपी ​​पते और बंदरगाहों को निर्दिष्ट करने के लिए 'हटन' की आवश्यकता है, और एंडियन-सुरक्षित डेटा प्रारूपों को निर्दिष्ट करने का एक सुविधाजनक तरीका है, लेकिन यह एकमात्र तरीका नहीं है। –

1

आप केवल अपने खेल अलग हार्डवेयर आर्किटेक्चर पर चलाने के लिए आवश्यक है या नहीं इसके बारे में चिंता करने की जरूरत है। यदि आप सकारात्मक हैं कि यह हमेशा इंटेल हार्डवेयर पर चलता रहेगा तो आप इसके बारे में भूल सकते हैं। यदि यह लिनक्स पर चलेगा हालांकि कई लोग इंटेल की तुलना में विभिन्न आर्किटेक्चर का उपयोग करते हैं और आप इसके बारे में सोचने के लिए समाप्त हो सकते हैं।

+3

इसके अतिरिक्त यह केवल तभी महत्वपूर्ण है जब आप कंप्यूटर के बीच डेटा का आदान-प्रदान करते हैं या जब आप बाइनरी प्रारूप में डेटा संग्रहीत करते हैं। –

+0

@Georg आह अच्छा बिंदु। मैं इसका उल्लेख करना भूल गया था। – Cromulent

+0

या जब आप डेटा को क्रमशः स्थानांतरित करते हैं और आपको चुनना होगा कि कौन सा बाइट पहले भेजना है। – JustJeff

1

क्या आप स्रोत कोड फ़ॉर्म में गेम वितरित कर रहे हैं?

क्योंकि अगर आप आप केवल एक द्विआधारी के रूप में खेल का वितरण कर रहे हैं, तो आप वास्तव में पता है जो प्रोसेसर परिवारों के लिए अपने खेल पर चलेंगे। साथ ही, मीडिया फाइलें, क्या वे उपयोगकर्ता उत्पन्न होते हैं (संभवतः एक स्तर संपादक के माध्यम से) या क्या वे वास्तव में केवल आपके द्वारा आपूर्ति की जाने वाली मानसिकता हैं?

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

हालांकि, अगर आप या तो स्रोत वितरण और/या उम्मीद कर लोगों को अपने खेल को अनुकूलित करेंगे रहे हैं, तो आप चिंता का विषय के लिए एक संभावित है। हालांकि, इन दिनों के आसपास के अधिकांश डेस्कटॉप/लैपटॉप कंप्यूटरों के साथ x86 पर जाने के साथ मुझे लगता है कि यह एक कम चिंता का विषय है।

+0

मेरे पास जानबूझकर उपयोगकर्ताओं को लेने/संपादित/संशोधित/सामग्री जोड़ने के लिए डेटा फ़ाइलों को "बस बाहर रखना" है। स्तर एक संपादक का उपयोग करते हैं लेकिन आउटपुट एक बीज और एक लंबी स्ट्रिंग फिर से होती है (मैं थोड़ी देर के लिए उपयोग किया जाता है)। शेष प्रक्रियात्मक है। मान लीजिए कि अधिकांश उपयोगकर्ता स्पर्श करेंगे संस्करण Win32 एक होगा, जिसे वितरण समय पर प्रीकंपल किया जाएगा। (केवल उपाख्यान के रूप में मैंने लिनक्स या स्रोत निर्माण का उपयोग किया है) आपके उत्तर के लिए धन्यवाद। – GAKOKO

0

समस्या नेटवर्किंग और कैसे डेटा नहीं भेजा जाता है और जब आप अलग प्रोसेसर पर नगण्य के बाद से विभिन्न प्रोसेसर स्मृति में अलग ढंग से डाटा स्टोर कर सकते हैं बिट कर रहे हैं के साथ होता है।

1

जब भी आप प्राप्त/एक नेटवर्क से डेटा संचारित, याद करने के लिए/परिवर्तित करने के लिए नेटवर्क और होस्ट बाइट क्रम से। सी फ़ंक्शन htons, htonl आदि, या आपकी भाषा में समकक्ष, का उपयोग यहां किया जाना चाहिए।

जब भी आप फ़ाइल से बहु-बाइट मान (जैसे यूटीएफ -16 वर्ण या 32 बिट इन्ट्स) पढ़ते हैं, तब से वह फ़ाइल अलग-अलग अंतःस्थापितता वाले सिस्टम पर उत्पन्न हो सकती है। अगर फ़ाइल यूटीएफ 16 या 32 है तो शायद यह एक बीओएम (बाइट ऑर्डर मार्क) है। अन्यथा, फ़ाइल प्रारूप को किसी भी तरह से अंतहीनता निर्दिष्ट करना होगा।

0

मेरा मानना ​​है कि पावर पीसी में इंटेल बोर्डों की विपरीत अंतहीनता है। हो सकता है कि एक दिनचर्या हो सके जो आर्किटेक्चर पर निर्भर अंत्येष्टि सेट कर सके? मुझे यकीन नहीं है कि क्या आप वास्तव में बता सकते हैं कि हार्डवेयर आर्किटेक्चर कोड में क्या है ... हो सकता है कि कोई मुझे समझदार हो तो मुझे उस प्रश्न का उत्तर पता चलेगा।

अब आपके कथन "मानक" गेमर एच/डब्ल्यू के संदर्भ में, मैं कहूंगा कि आम तौर पर आप उपभोक्ता बंद शेल्फ समाधानों को देखने जा रहे हैं वास्तव में कोई भी मानक गेमर उपयोग कर रहा है, तो आप लगभग जा रहे हैं निश्चित रूप से बोर्ड में एक ही एंडियन प्राप्त करने के लिए। मुझे यकीन है कि कोई मेरे साथ असहमत होगा लेकिन यह मेरा $ है।02

हा ... मैंने अभी देखा है कि एक लिंक है जो ऊपर दिए गए सुझाव से संबंधित है।

Find Endianness through a c program

5

बार जब आप endianess के बारे में चिंता करने की जरूरत:

  • आप मशीनों या प्रक्रियाओं के बीच बाइनरी डेटा भेज रहे हैं (एक नेटवर्क या फ़ाइल का उपयोग)। यदि मशीनों में अलग बाइट ऑर्डर हो सकता है या प्रोटोकॉल का इस्तेमाल एक विशेष बाइट ऑर्डर (जो इसे करना चाहिए) निर्दिष्ट करता है, तो आपको अंतहीनता से निपटने की आवश्यकता होगी।
  • आपके पास कोड है जो विभिन्न प्रकार के पॉइंटर्स के रूप में स्मृति तक पहुंचता है (कहें कि char* के माध्यम से आप unsigned int चर का उपयोग करते हैं)।

आप इन बातों को आप बाइट क्रम के साथ काम कर रहे हैं कि क्या आप जानते हैं या नहीं करते हैं - यह हो सकता है कि आप यह सोचते हैं कि यह एक ही रास्ता या अन्य, जो ठीक रूप में लंबे समय से काम कर सकते है द्वारा यह साथ काम कर रहे क्योंकि आपके कोड को एक अलग मंच से निपटने की ज़रूरत नहीं है।

इसी तरह से, आपको आम तौर पर उन मामलों में और इसी कारणों से संरेखण के मुद्दों से निपटने की आवश्यकता होती है। एक बार फिर, आप कुछ भी नहीं कर रहे हैं और सब कुछ ठीक काम कर रहे हैं क्योंकि आपको प्लेटफॉर्म सीमाएं पार करने की ज़रूरत नहीं है (जो कि यदि आवश्यकता हो तो सड़क पर आपको काटने के लिए वापस आ सकता है)।

संबंधित मुद्दे

 संबंधित मुद्दे