কেন size_t
এখানে থাকা দরকার এবং কীভাবে আমরা এখানে এলাম তা জানার জন্য:
ব্যবহারিক দিক থেকে size_t
এবং a৪ ptrdiff_t
বিট প্রয়োগের ক্ষেত্রে b৪ বিট প্রশস্ত, 32-বিট বাস্তবায়নে 32 বিট প্রস্থ এবং এই জাতীয় গ্যারান্টিযুক্ত। উত্তরাধিকারের কোডটি ভঙ্গ না করে তারা প্রতিটি সংকলকটিতে বিদ্যমান কোনও প্রকারকে বোঝাতে বাধ্য করতে পারেনি।
ক size_t
বা ptrdiff_t
অগত্যা একটি intptr_t
বা হিসাবে একই হয় না uintptr_t
। তারা নির্দিষ্ট আর্কিটেকচারের যে এখনও ব্যবহৃত ছিল বিভিন্ন ছিল size_t
এবং ptrdiff_t
প্রয়াত '80s মধ্যে স্ট্যান্ডার্ড যোগ করা হয় নি, এবং অপ্রচলিত হয়ে উঠছে যখন C99 অনেক নতুন ধরনের যোগ কিন্তু এখনও সরানো হয়নি (যেমন 16 বিট উইন্ডোজ হিসাবে)। 16-বিট সুরক্ষিত মোডে x86 এর একটি বিভাগযুক্ত মেমরি ছিল যেখানে বৃহত্তম সম্ভাব্য অ্যারে বা কাঠামো মাত্র 65,536 বাইট আকারের হতে পারে, তবে far
রেজিস্টারগুলির চেয়ে 32 বিট প্রশস্ত, পয়েন্টার হওয়া দরকার। ঐ তারিখে, intptr_t
32 বিট প্রশস্ত হতো কিন্তু size_t
এবংptrdiff_t
16 বিট প্রশস্ত এবং একটি রেজিস্টারে ফিট হতে পারে। এবং ভবিষ্যতে কোন ধরণের অপারেটিং সিস্টেম লিখিত হতে পারে কে জানত? তত্ত্ব অনুসারে, আই 386 আর্কিটেকচারটি 48-বিট পয়েন্টার সহ 32-বিট সেগমেন্টেশন মডেল সরবরাহ করে যা কোনও অপারেটিং সিস্টেম আসলে ব্যবহার করেনি।
অফসেটের মেমরির ধরণটি long
কারণ হতে পারে না কারণ অনেক বেশি লিগ্যাসি কোডটি ধরে নিয়েছে যে long
32 বিট বিস্তৃত। এই অনুমানটি এমনকি ইউএনআইএক্স এবং উইন্ডোজ এপিআইতে নির্মিত হয়েছিল। দুর্ভাগ্যক্রমে, প্রচুর অন্যান্য লিগ্যাসি কোডও ধরে নিয়েছে যে long
পয়েন্টার, ফাইল অফসেট, সেকেন্ডের সংখ্যা যে ১৯ 1970০ সাল থেকে পেরিয়ে গেছে, ধরে রাখার জন্য যথেষ্ট প্রশস্ত। পজিক্স এখন পূর্বের পরিবর্তে পরবর্তী ধারণাটি সত্য হতে বাধ্য করার জন্য একটি প্রমিত মানের উপায় সরবরাহ করে তবে কোনওটিই বহনযোগ্য পোর্টেবল অনুমান নয়।
এটি হতে পারে না int
কারণ 90 এর দশকে কেবলমাত্র একটি ক্ষুদ্র মুষ্টিমেয় সংকলক int
64 বিট প্রশস্ত করেছিলেন। তারপরে long
32 বিট প্রশস্ত রেখে তারা সত্যিই অদ্ভুত হয়ে উঠল । স্ট্যান্ডার্ডের পরবর্তী সংশোধনটি এর int
চেয়ে বেশি বিস্তৃত হওয়ার জন্য এটি অবৈধ ঘোষণা করেছে long
, তবে int
বেশিরভাগ 64-বিট সিস্টেমে 32 বিট প্রস্থ রয়েছে।
এটি হতে পারে না long long int
, যা যাইহোক পরে যুক্ত করা হয়েছিল, যেহেতু এটি 32-বিট সিস্টেমে কমপক্ষে 64 বিট প্রশস্ত হতে তৈরি হয়েছিল।
সুতরাং, একটি নতুন ধরণের প্রয়োজন ছিল। এমনকি এটি না হলেও, এই সমস্ত অন্যান্য ধরণের অর্থ একটি অ্যারে বা অবজেক্টের মধ্যে অফসেট ব্যতীত অন্য কিছু। এবং যদি 32-থেকে-64-বিট স্থানান্তরের ফায়াসকো থেকে একটি পাঠ পাওয়া যায়, তবে এটি নির্দিষ্ট হওয়া উচিত যে কোন ধরণের কী কী সম্পত্তি থাকতে হবে এবং এটি বিভিন্ন প্রোগ্রামে বিভিন্ন জিনিস বোঝাতে একটি ব্যবহার করা উচিত নয়।
int
যদিsome_size
সাইন করা হয়েছে,size_t
যদি এটা স্বাক্ষরবিহীন করা হয়।