যৌক্তিক (অ-প্রযুক্তিগত) দৃষ্টিকোণ থেকে, কোনও সুবিধা নেই।
যে কোনও সরল সি / সি ++ কোড উপযুক্ত "লাইব্রেরি কনস্ট্রাক্ট" এর মধ্যে মোড়ানো যায়। এই ধরণের মোড়কের পরে, "এটি এর চেয়ে আরও সুবিধাজনক কিনা" বিষয়টি একটি মূল প্রশ্নে পরিণত হয়।
স্পিড পয়েন্ট অফ দ্য ভিউ থেকে, সি / সি ++ গ্রন্থাগারটি এমন কোড তৈরির অনুমতি দেয় যা এটি প্লেইন কোডের মতো কার্যকর is এটি তবে সাপেক্ষে:
- ফাংশন ইনলাইনিং
- সংকলন-সময় চেকিং এবং অপ্রয়োজনীয় রানটাইম চেকিং নির্মূলকরণ
- ডেড কোড নির্মূলকরণ
- অন্যান্য অনেক কোড অপ্টিমাইজেশন ...
এই ধরণের অ-প্রযুক্তিগত যুক্তি ব্যবহার করে যে কোনও "অনুপস্থিত ফাংশন" যে কেউ যুক্ত করতে পারে এবং তাই অসুবিধা হিসাবে গণ্য হয় না।
তবে অতিরিক্ত কোড সহ অন্তর্নির্মিত প্রয়োজনীয়তা এবং সীমাবদ্ধতাগুলি কাটিয়ে উঠতে পারে না। নীচে, আমি যুক্তি দিচ্ছি যে আকারটি std::bitset
একটি সংকলন-সময় ধ্রুবক, এবং অতএব অসুবিধে হিসাবে গণ্য না হলেও এটি এখনও এমন কিছু যা ব্যবহারকারীর পছন্দকে প্রভাবিত করে।
একটি নান্দনিক দৃষ্টিকোণ থেকে (পঠনযোগ্যতা, রক্ষণাবেক্ষণের স্বাচ্ছন্দ্য ইত্যাদি) থেকে ভিন্নতা রয়েছে is
তবে, এটি স্পষ্ট নয় যে std::bitset
কোডটি সাথে সাথে প্লেইন সি কোডের উপরে জয়লাভ করে। কোডের বড় টুকরো (এবং খেলনা-নমুনার কিছু নয়) দেখতে হবে যে std::bitset
উত্স কোডের ব্যবহারের ফলে মানুষের মান উন্নত হয়েছে কিনা ।
বিট ম্যানিপুলেশনের গতি কোডিং শৈলীর উপর নির্ভর করে। কোডিং স্টাইলটি সি / সি ++ বিট ম্যানিপুলেশন উভয়কেই প্রভাবিত করে এবং নীচে std::bitset
বর্ণিত হিসাবে বর্ণিত হিসাবে একইভাবে প্রযোজ্য ।
যদি কেউ এমন কোড লিখে থাকে যা operator []
একবারে একটি বিট পড়তে এবং লিখতে ব্যবহার করে, যদি একাধিক বিট ম্যানিপুলেট করতে হয় তবে একাধিকবার এটি করতে হবে। সি-স্টাইল কোড সম্পর্কে একই কথা বলা যেতে পারে।
যাইহোক, bitset
যেমন হিসাবে অন্যান্য অপারেটর, হয়েছে operator &=
, operator <<=
ইত্যাদি, যা bitset পূর্ণ প্রস্থ উপর কাজ করে। কারণ অন্তর্নিহিত যন্ত্রপাতি প্রায়শই 32-বিট, 64-বিট এবং কখনও কখনও 128-বিট (সিমডি সহ) একসাথে (একই সংখ্যক সিপিইউ চক্রের), এমন কোড ব্যবহার করে যা এমন মাল্টি-বিট ক্রিয়াকলাপগুলির সুবিধা নিতে ডিজাইন করা হয়েছে "লুপী" বিট-ম্যানিপুলেশন কোডের চেয়ে দ্রুত হতে পারে।
সাধারণ ধারণাটিকে স্বর (একটি রেজিস্টারের মধ্যে সিমডি ) বলা হয় এবং এটি বিট ম্যানিপুলেশনের অধীনে একটি সাবটোপিক।
কিছু সি ++ বিক্রেতারা bitset
সিমডের সাথে 64-বিট এবং 128-বিটের মধ্যে প্রয়োগ করতে পারে । কিছু বিক্রেতারা নাও করতে পারেন (তবে শেষ পর্যন্ত তা করতে পারে)। যদি সি ++ বিক্রেতার লাইব্রেরিটি কী করছে তা যদি জানতে হয় তবে একমাত্র উপায় হ'ল বিচ্ছিন্নতা দেখা।
std::bitset
সীমাবদ্ধতা আছে কিনা তা হিসাবে , আমি দুটি উদাহরণ দিতে পারি।
std::bitset
সংকলনের সময় আকারটি অবশ্যই জানা উচিত। গতিশীল চয়ন করা আকারের সাথে বিটের একটি অ্যারে তৈরি করতে, একটি ব্যবহার করতে হবে std::vector<bool>
।
- বর্তমানের সি ++ স্পেসিফিকেশন বড় বড় বি
std::bitset
বিট থেকে N বিটগুলির একটানা টুকরো বের করার কোনও উপায় সরবরাহ করে না bitset
।
প্রথমটি মৌলিক, যার অর্থ গতিশীল আকারের বিটসেটগুলির প্রয়োজন তাদের অবশ্যই অন্যান্য বিকল্প নির্বাচন করতে হবে choose
দ্বিতীয়টি কাটিয়ে উঠতে পারে, কারণ স্ট্যান্ডার্ডটি এক্সটেনসিবল না হলেও কোনওটি টাস্কটি সম্পাদনের জন্য কিছু প্রকারের অ্যাডাপ্টার লিখতে পারে bitset
।
কিছু নির্দিষ্ট ধরণের উন্নত এসওআর অপারেশন রয়েছে যা বাইরের বাইরে সরবরাহ করা হয় না std::bitset
। বিট পারমিটেশন সম্পর্কে এই ওয়েবসাইটটিতে এই অপারেশনগুলি সম্পর্কে কেউ পড়তে পারেন । যথারীতি, কেউ এগুলি নিজের উপর প্রয়োগ করতে পারে এবং উপরে কাজ করে std::bitset
।
পারফরম্যান্স নিয়ে আলোচনা সম্পর্কিত Regarding
একটি উপদেশ: প্রচুর লোক স্ট্যান্ডার্ড লাইব্রেরি থেকে কেন কিছু (কিছু) সাধারণ সি-স্টাইলের কোডের চেয়ে অনেক ধীরে ধীরে হয় তা সম্পর্কে জিজ্ঞাসা করে । আমি এখানে মাইক্রোব্যাঙ্কমার্কিংয়ের পূর্বশর্ত জ্ঞানের পুনরাবৃত্তি করব না, তবে আমার কেবল এই পরামর্শটি রয়েছে: "রিলিজ মোডে" (অপ্টিমাইজেশন সক্ষম করা সহ) বেঞ্চমার্ক নিশ্চিত করুন, এবং নিশ্চিত করুন যে কোডটি মুছে ফেলা হচ্ছে না (ডেড কোড নির্মূলকরণ) বা হচ্ছে একটি লুপ থেকে উত্তোলিত (লুপ-ইনভেরিয়েন্ট কোড গতি) ।
যেহেতু সাধারণভাবে আমরা বলতে পারি না যে কেউ (ইন্টারনেটে) সঠিকভাবে মাইক্রোবেইনমার্কগুলি করছে কিনা, তাই নির্ভরযোগ্য উপসংহার পাওয়ার একমাত্র উপায় হ'ল আমাদের নিজস্ব মাইক্রোব্যাঙ্কমার্কগুলি করা, এবং বিশদটি নথিভুক্ত করা, এবং জনসাধারণের পর্যালোচনা এবং সমালোচনাতে জমা দেওয়া। অন্যরা এর আগে যে মাইক্রোব্যাঙ্কমার্কগুলি করেছে তা পুনরায় করাতে ক্ষতি হয় না।
std::bitset
সংকলন সময়ে স্থির করা হয়। আমি ভাবতে পারি এটিই একমাত্র পঙ্গু দোষ।