size_tअस्तित्व में रहने की आवश्यकता क्यों है और हम यहां कैसे पहुंचे:
व्यावहारिक शब्दों में, size_tऔर ptrdiff_t64-बिट कार्यान्वयन पर 64 बिट्स विस्तृत होने की गारंटी है, 32 बिट्स एक 32-बिट कार्यान्वयन पर, और इसी तरह। वे किसी भी मौजूदा प्रकार को यह कहने के लिए मजबूर नहीं कर सकते थे कि, प्रत्येक संकलक पर, बिना विरासत कोड को तोड़ने के।
एक size_tया ptrdiff_tआवश्यक रूप से के रूप में ही नहीं है intptr_tया uintptr_t। वे कुछ निश्चित आर्किटेक्चर पर भिन्न थे जो 80 के दशक के उत्तरार्ध में अभी भी उपयोग में थे size_tऔर ptrdiff_tमानक में जोड़े गए थे, और अप्रचलित हो रहे थे जब C99 ने कई नए प्रकार जोड़े लेकिन अभी तक नहीं गए (जैसे कि 16-बिट विंडोज)। 16-बिट संरक्षित मोड में x86 में खंडित मेमोरी थी जहां सबसे बड़ा संभव सरणी या संरचना आकार में केवल 65,536 बाइट्स हो सकती है, लेकिन farरजिस्टरों की तुलना में 32 बिट्स चौड़ा होने के लिए एक सूचक की आवश्यकता होती है। उन पर, intptr_t32 बिट्स चौड़े होंगे लेकिन size_tऔरptrdiff_tएक रजिस्टर में 16 बिट्स चौड़े और फिट हो सकते हैं। और कौन जानता था कि भविष्य में किस तरह का ऑपरेटिंग सिस्टम लिखा जा सकता है? सिद्धांत रूप में, i386 आर्किटेक्चर 48-बिट पॉइंटर्स के साथ 32-बिट सेगमेंटेशन मॉडल प्रदान करता है जिसे किसी भी ऑपरेटिंग सिस्टम ने वास्तव में उपयोग नहीं किया है।
एक मेमोरी ऑफ़सेट का प्रकार नहीं हो सकता है longक्योंकि अभी तक बहुत अधिक विरासत कोड मानता है कि longवास्तव में 32 बिट्स चौड़ा है। इस धारणा को UNIX और Windows API में भी बनाया गया था। दुर्भाग्य से, बहुत सारी अन्य विरासत कोड ने यह भी माना कि एक longपॉइंटर को पकड़ने के लिए पर्याप्त चौड़ा है, एक फ़ाइल ऑफसेट, सेकंड की संख्या जो 1970 के बाद से समाप्त हो गई है, और इसी तरह। POSIX अब पूर्व की बजाय बाद की धारणा को सच होने के लिए मजबूर करने के लिए एक मानकीकृत तरीका प्रदान करता है, लेकिन न तो बनाने के लिए एक पोर्टेबल धारणा है।
यह intइसलिए नहीं हो सका क्योंकि 90 के दशक में int64 बिट्स के चौड़े हिस्से में केवल कुछ मुट्ठी भर कंपाइलर थे । फिर वे long32 बिट्स को चौड़ा करके वास्तव में अजीब हो गए । मानक के अगले संशोधन ने इसे intअधिक से अधिक व्यापक होने के लिए अवैध घोषित किया long, लेकिन intअभी भी अधिकांश 64-बिट सिस्टम पर 32 बिट्स चौड़ा है।
यह नहीं हो सकता है long long int, जो वैसे भी बाद में जोड़ा गया था, क्योंकि यह 32-बिट सिस्टम पर भी कम से कम 64 बिट्स चौड़ा होने के लिए बनाया गया था।
इसलिए, एक नए प्रकार की आवश्यकता थी। यहां तक कि अगर यह नहीं थे, तो उन सभी अन्य प्रकारों का मतलब एक सरणी या वस्तु के भीतर ऑफसेट के अलावा कुछ और था। और अगर 32-से-64-बिट माइग्रेशन के फ़िस्को से एक सबक था, तो यह विशिष्ट होना चाहिए कि किस प्रकार के गुणों के लिए आवश्यक गुण हैं, और एक का उपयोग न करें जो विभिन्न कार्यक्रमों में अलग-अलग चीजों का मतलब है।
intतो यदिsome_sizeहस्ताक्षर किए गए हैं,size_tतो इसका उपयोग करें ।