নিম্নলিখিত উদাহরণ বিবেচনা করুন:
struct vector {
int size() const;
bool empty() const;
};
bool vector::empty() const
{
return size() == 0;
}
এর জন্য উত্পন্ন সমাবেশ কোড vector::empty
(অনুকূলকরণ সহ ঝনঝন করে):
push rax
call vector::size() const
test eax, eax
sete al
pop rcx
ret
কেন এটি স্ট্যাক স্পেস বরাদ্দ করে? এটি মোটেই ব্যবহৃত হয় না। push
এবং pop
বাদ দেওয়া যেতে পারে। এমএসভিসি এবং জিসিসির অনুকূল বিল্ডগুলিও এই ফাংশনের জন্য স্ট্যাক স্পেস ব্যবহার করে ( গডবোল্টে দেখুন ), সুতরাং অবশ্যই একটি কারণ থাকতে হবে।
@ Bob__: না কেন আমার উচিত?
—
ডাঃ গুট
vector::size()
উদাহরণ হিসাবে সংজ্ঞায়িত করা হয় না যে এটি ইনলাইনড নয়।
সুতরাং, একটি সংকলক এটি জানে না এমন কোনও বিষয়টিকে কীভাবে অনুকূল করতে পারে?
—
বব__
@ Bob__: আমি মনে করি, বাস্তবায়ন জানার
—
ডাঃ গুট
vector::size()
জন্য স্ট্যাক ফ্রেম বরাদ্দ বা বরাদ্দ না প্রাসঙ্গিক vector::empty()
। ইন empty()
এটা ঠিক বলা হয়, যাই হোক না কেন।
ঠিক আছে, আপনি এমন একটি ফাংশন কল করছেন যা কিছু ফেরত দেয় , এর জন্য আপনার স্থান প্রয়োজন (যদি আপনি আরও ভাল না জানেন)।
—
বব__
this
প্যারামিটারের জন্য অ্যাকাউন্ট করেছিলেন ?