মাইক্রো অপ্টিমাইজার লোকের জন্য উপস্থাপক
মনে রাখবেন:
"প্রোগ্রামাররা তাদের প্রোগ্রামের অদ্বিতীয় অংশগুলির গতি সম্পর্কে চিন্তাভাবনা করে, বা উদ্বিগ্ন হয়, এবং ডিবাগিং এবং রক্ষণাবেক্ষণ বিবেচনা করার সময় দক্ষতার এই প্রচেষ্টাগুলি আসলে একটি শক্ত নেতিবাচক প্রভাব ফেলে। আমাদের ছোট কার্যকারিতা সম্পর্কে ভুলে যাওয়া উচিত, সম্পর্কে বলুন Of৯% সময়: অকালীন অপটিমাইজেশন হ'ল সমস্ত অশুভের মূল Yet
( সম্পূর্ণ উদ্ধৃতির জন্য রূপান্তরকে ধন্যবাদ )
ভেক্টরের পরিবর্তে (বা যাই হোক না কেন) কোনও সি অ্যারে ব্যবহার করবেন না কারণ আপনি বিশ্বাস করেন যে এটি নিম্ন স্তরের বলে মনে করা হওয়ায় এটি দ্রুততর। আপনি ভুল হবে।
ডিফল্ট ভেক্টর (বা আপনার প্রয়োজনের সাথে অভিযোজিত নিরাপদ ধারক) ব্যবহার করুন এবং তারপরে যদি আপনার প্রোফাইলার এটি সমস্যা বলে মনে করেন, তবে আপনি আরও ভাল অ্যালগরিদম ব্যবহার করে বা ধারক পরিবর্তন করে এটি অপ্টিমাইজ করতে পারবেন কিনা তা দেখুন।
এটি বলেছে, আমরা মূল প্রশ্নে ফিরে যেতে পারি।
স্ট্যাটিক / ডায়নামিক অ্যারে?
সি ++ অ্যারে শ্রেণিগুলি নিম্ন-স্তরের সি অ্যারের চেয়ে ভাল আচরণ করা হয় কারণ তারা নিজের সম্পর্কে অনেক কিছু জানে এবং সি অ্যারে যে প্রশ্নগুলি করতে পারে না তার উত্তর দিতে পারে। তারা নিজের পরে পরিষ্কার করতে সক্ষম হয়। এবং আরও গুরুত্বপূর্ণ, এগুলি সাধারণত টেমপ্লেট এবং / অথবা ইনলাইনিং ব্যবহার করে রচিত হয় যার অর্থ ডিবাগের মধ্যে প্রচুর কোড প্রকাশিত হয় যা রিলিজ বিল্ডে উত্পাদিত সামান্য বা কোনও কোডের সমাধান হয়, যার অর্থ তাদের বিল্ট-ইন কম নিরাপদ প্রতিযোগিতার সাথে কোনও পার্থক্য নেই।
সব মিলিয়ে এটি দুটি বিভাগে পড়ে:
গতিশীল অ্যারে
ম্যালোক-এডি / নতুন-এড অ্যারেতে পয়েন্টার ব্যবহার করা স্ট্যান্ড :: ভেক্টর সংস্করণ হিসাবে সবচেয়ে দ্রুত এবং অনেক কম নিরাপদ হবে ( লিটব পোস্টটি দেখুন )।
সুতরাং একটি std :: ভেক্টর ব্যবহার করুন।
স্ট্যাটিক অ্যারে
স্ট্যাটিক অ্যারে ব্যবহার করা সর্বোত্তম:
সুতরাং একটি স্টাডি :: অ্যারে ব্যবহার করুন ।
একীকরণবিহীন স্মৃতি
কখনও কখনও, একটি ব্যবহার vectorপরিবর্তে একটি কাঁচা বাফার একটি দৃশ্যমান খরচ incurs কারণ vectorমন্তব্য যেমন নির্মাণ এ বাফার আরম্ভ হবে, যখন কোড তা পরিবর্ত না, Bernie তার দ্বারা উত্তর ।
যদি এটি হয় তবে আপনি এটির unique_ptrপরিবর্তে একটি ব্যবহার করে এটি পরিচালনা করতে পারেন vectorবা যদি আপনার কোডলাইনে কেস ব্যতিক্রমী না হয় তবে প্রকৃতপক্ষে এমন একটি শ্রেণি লিখুন buffer_ownerযা সেই স্মৃতিটির মালিক হবে, এবং আপনাকে এতে সহজ এবং নিরাপদ অ্যাক্সেস দেবে, সহ এটির আকার পরিবর্তন করার মতো বোনাস (ব্যবহার করছেন realloc?) অথবা আপনার যা প্রয়োজন।