অন্যান্য প্ল্যাটফর্মগুলিতে সি / সি ++ ব্যবহার করার সময়, intপ্রকারটি সাধারণত 4 বাইট (বা সম্ভবত আরও বেশি) হয়। তবে, আরডুইনোতে এটি মাত্র 2 বাইট।
এটা আলাদা কেন? আমি যদি এর longপরিবর্তে সর্বদা 4 বাইট ব্যবহার করি তবে এটি কী কর্মক্ষমতাকে প্রভাবিত করে?
অন্যান্য প্ল্যাটফর্মগুলিতে সি / সি ++ ব্যবহার করার সময়, intপ্রকারটি সাধারণত 4 বাইট (বা সম্ভবত আরও বেশি) হয়। তবে, আরডুইনোতে এটি মাত্র 2 বাইট।
এটা আলাদা কেন? আমি যদি এর longপরিবর্তে সর্বদা 4 বাইট ব্যবহার করি তবে এটি কী কর্মক্ষমতাকে প্রভাবিত করে?
উত্তর:
প্রচুর আরডুইনোসে ব্যবহৃত এটিমেগ 328 হ'ল 8-বিটের মাইক্রোকন্ট্রোলার। এর অর্থ হ'ল নিবন্ধগুলি 8-বিট, ডেটা বাস 8-বিট, বন্দরগুলি 8-বিট। সিস্টেমে কয়েকটি ন্যূনতম 16-বিট দিক রয়েছে (যেমন টাইমারগুলির মধ্যে একটি), তবে প্রায় সবকিছুই 8-বিট।
অতএব, বেশিরভাগ অপারেশনগুলি একসাথে 8-বিট পরিচালনা করে। 8-বিট (16-বিট বা 32-বিট ইন্টিজার এবং ফ্লোটিং পয়েন্ট সংখ্যা) ব্যতীত অন্য কোনও কিছুর জন্য কাজ করাতে সফ্টওয়্যার এমুলেশন হিসাবে প্রয়োজনীয়ত কী বর্ণনা করা যেতে পারে, যেখানে সংকলক এই বৃহত্তর ভেরিয়েবলগুলিতে কাজ করতে একাধিক নির্দেশনা ব্যবহার করে।
8-বিট 8 বিট পোর্টকে সম্বোধন করার জন্য স্পষ্টতই যথেষ্ট। অনেক লুপ কাউন্টার, রিটার্ন মান এবং ASCII অক্ষরগুলি মোকাবেলা করার জন্য এটি যথেষ্ট। সংখ্যার সাথে কাজ করার সময় এটি যথেষ্ট পর্যাপ্ত নয়। একটি স্বাক্ষরিত 8-বিট ইন্ট (int8_t) কেবল -128 -> +127 উপস্থাপন করতে পারে। স্বাক্ষরযুক্ত (uint8_t) কেবল 0 -> 255 উপস্থাপন করতে পারে।
8-বিট পূর্ণসংখ্যা বেশ সীমাবদ্ধ। সি / সি ++ ইন্টের অন্ততপক্ষে -32,678 -> +32,767 প্রতিনিধিত্ব করতে হবে তাই 16 -t মানচিত্র - এটি ক্ষুদ্রতম আকার যা এটি করবে। এটি পরিসীমা এবং দক্ষতার একটি ভাল ভারসাম্য দেয়। প্রাথমিকভাবে যখন শিখতে হয় তখন এটি বিশেষত গুরুত্বপূর্ণ - ওভারফ্লো সত্যিই এমন কিছু নয় যা নন-প্রোগ্রামাররা বোঝে।
এটি করার একটি কার্যকারিতা প্রভাব রয়েছে, কারণ বেশিরভাগ 16-বিট অপারেশনগুলি 8-বিট অপারেশন হিসাবে কমপক্ষে দ্বিগুণ দীর্ঘ সময় নেয় এবং দ্বিগুণ রেজিস্টার ব্যবহার করে। এটি আপনার পক্ষে কোনও তাত্পর্যপূর্ণ হতে পারে বা নাও পারে।
আমাদের মধ্যে অনেকে নেটিভ টাইপ যেমন int8_t এবং uint8_t এ স্যুইচ করে যা এটি আপনাকে আরও বেশি নিয়ন্ত্রণ দেয়।
int32-বিট! arduino.cc/en/References/int
সি এবং সি ++ ভাষা সম্পর্কে একটি গুরুত্বপূর্ণ তথ্য হ'ল তাদের নিজ নিজ মানগুলি ইন্টিগ্রাল এবং ভাসমান পয়েন্ট নম্বর ধরণের আকার (বাইটে) সংজ্ঞায়িত করে না।
তারা কেবলমাত্র এই ব্যাপ্তির মধ্যে ন্যূনতম ব্যাপ্তি এবং সম্পর্ককে সংজ্ঞায়িত করে
range(short) <= range(int) < range(long)
সুতরাং যেমন একটি আকার intসাধারণত উপর নির্ভর করবে:
sizeof(short) == sizeof(int) == sizeof(long)সম্ভব?
sizeof(short) < sizeof(long)।
intআর্দুইনো বকেলে 4 বাইট একটিshortসমস্ত বিদ্যমান Ardunios 2 বাইট হতে হবে, কিন্তু আমি ব্যবহার অন্যদের পরামর্শ জোর দেওয়াint16_tবাuint16_t।