Sobes.tech
Middle+

როგორ ინახება ოპციონალები მეხსიერებაში?

sobes.tech AI

პასუხი AI-სგან

Swift-এ অপশনালটি দুটি কেসের একটি enumeration উপস্থাপন করে: .none (অথবা nil) এবং .some(Wrapped)

enum Optional<Wrapped> {
    case none
    case some(Wrapped)
}

যখন অপশনালটি মান ধারণ করে (.some(Wrapped)), এটি Wrapped প্রকারের মানটি এবং অতিরিক্ত একটি বিট সংরক্ষণ করে, যা মানের উপস্থিতি নির্দেশ করে। যদি অপশনালটি nil হয় (.none), তবে কেবল এই বিট বা একটি বিশেষ বাইট প্যাটার্ন সংরক্ষিত হয়, যা মানের অনুপস্থিতি নির্দেশ করে।

সংরক্ষণের পদ্ধতি Wrapped প্রকার এবং প্রসেসর আর্কিটেকচারের (32-বিট বা 64-বিট) উপর নির্ভর করে পরিবর্তিত হতে পারে, তবে মূল ধারণা হল মানের উপস্থিতি নির্দেশক ব্যবহার করা। রেফারেন্স টাইপের জন্য, উদাহরণস্বরূপ, nil কে শূন্য পয়েন্টার দ্বারা উপস্থাপন করা যেতে পারে, যখন নির্দেশকটি প্রয়োজন হয় না বা এটি সংযুক্ত হয়। মান টাইপের জন্য অতিরিক্ত স্থান প্রয়োজন।

64-বিট আর্কিটেকচারের উদাহরণ এবং নির্দেশক সহ:

  • যদি Optional<T> মান ধারণ করে: T এর জন্য স্মৃতি + 1 বিট (অথবা বাইট) "মান আছে" নির্দেশকের জন্য।
  • যদি Optional<T> nil হয়: সাধারণত একটি বিশেষ বাইট প্যাটার্ন সংরক্ষিত হয় বা রেফারেন্স টাইপের জন্য একটি পয়েন্টার সহ সংযুক্ত হয়।

গুরুত্বপূর্ণ: তাদের আকার তাদের প্রাকৃতিক সমতলের চেয়ে ছোট ধরনের জন্য (উদাহরণস্বরূপ, 64-বিট সিস্টেমে Bool), উপস্থিতি নির্দেশক "অন্তর্ভুক্ত" হতে পারে অবশিষ্ট বিটে, যা স্মৃতি সংরক্ষণ করে। এই অপ্টিমাইজেশনকে "Nullable Pointer Optimization" বলা হয় এবং কিছু মান টাইপের জন্যও প্রযোজ্য।