2012-12-28 17 views
6

संभव डुप्लिकेट:
size_t vs. intptr_tक्या uintptr_t और size_t समान हैं?

संकेत के साथ अपने कोड सौदों में से कुछ और uintptr_t इनपुट के रूप में लेता है के बाद से यह संकेत के साथ काम करने की है।

अब मुझे पूर्णांक के साथ एक ही चीज़ करना है, इसलिए मैं उस कोड का पुन: उपयोग करना चाहता हूं।

size_tuintptr_t जैसा ही है? क्या मैं कार्यान्वयन को बदल सकता हूं और size_t के साथ uintptr_t को प्रतिस्थापित करके दोनों पॉइंटर्स और पूर्णांक के लिए एक ही कोड का उपयोग कर सकता हूं?

उत्तर

15

size_t संभवतः सबसे बड़ी संभावित ऑब्जेक्ट का आकार रखने के लिए पर्याप्त होना चाहिए। uintptr_t किसी भी सूचक होने के लिए पर्याप्त होना चाहिए। यह देखते हुए, यह sizeof(uintptr_t) >= sizeof(size_t) ( में सभी बाइट्स के बाद से सबसे कम संभव वस्तु को संबोधित करने योग्य होना चाहिए), लेकिन अधिक नहीं है। रैखिक पते वाले मशीनों पर, वे शायद समान आकार होंगे। खंडित आर्किटेक्चर पर, दूसरे हाथ पर, यह सामान्य uintptr_tsize_t से भी बड़ा हो सकता है के लिए है, क्योंकि एक वस्तु एक भी क्षेत्र में होना चाहिए, लेकिन एक सूचक सक्षम स्मृति के सभी को संबोधित करने के लिए किया जाना चाहिए।

2

यह कार्यान्वयन पर निर्भर करता है (और इसमें प्रोसेसर, एबीआई, कंपाइलर, मानक पुस्तकालय शामिल हैं)। आपको कोई गारंटी नहीं है कि size_tuintptr_t जैसा ही है; लेकिन ऐसा हो सकता है (32 बिट्स लिनक्स x86 या एआरएम पर, दोनों 32 बिट्स हस्ताक्षरित पूर्णांक हैं)।

और size_t का इरादा आकार (विशेष रूप से आवंटित स्मृति भाग) का होना है, जबकि uintptr_t का उद्देश्य पॉइंटर्स के समान आकार के एक हस्ताक्षरित पूर्णांक होना है।

-1

विभिन्न कंपाइलर के पास अलग-अलग परिणाम हैं। अगर आप चाहते हैं कि उनका एक ही प्रभाव हो, तो आपको यह सुनिश्चित करना होगा कि आपका कंपाइलर 32 बिट्स लिनक्स x86 या एआरएम पर होना चाहिए, और यह सही होगा।

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