রেড জোনটি হ'ল নির্ভেজাল এবং সহজভাবে একটি অপ্টিমাইজেশন যা নির্দেশাবলী সংরক্ষণ করতে পারে। এর অর্থ হ'ল প্রতিটি ফাংশনের জন্য নির্গত কোডের প্রয়োজন নেই স্ট্যাক পয়েন্টার থেকে বিয়োগ করে স্থানীয় স্টোরেজ তৈরি করা
sub XXX, %rsp
প্রতিটি ফাংশন কলের শুরুতে, এমনকি যদি তারা পাতার ফাংশন নাও থাকে প্রায়শই বার সংকলক থেকে নির্গত কোডটি স্ট্যাক পয়েন্টারের নীচে রেড জোনের অস্থায়ী স্থানটি সংরক্ষণ করার প্রয়োজন ছাড়াই এবং অন্যান্য ফাংশনগুলি কল করার আগে ব্যবহার করতে পারে। এটি উপলব্ধ একটি দরকারী অপ্টিমাইজেশন।
যদি আপনাকে আর স্ট্যাক পয়েন্টারটি থেকে সাব সাব করতে না হয় তবে নির্গত কোডটি বেস পয়েন্টার হিসাবে আরএসপি ব্যবহার করতে পারে, সাধারণত একটি কাজ আরবিপি-র জন্য সংরক্ষিত থাকে এবং নির্গত কোড আরবিপি ব্যবহার করতে পারে অন্য সাধারণ উদ্দেশ্যে নিবন্ধক হিসাবে।
এর পরিণামটি হ'ল প্রতিটি ফাংশন কলের উপস্থাপনা এবং পর্বটি দুটি নির্দেশিকা সংরক্ষণ করতে পারে যা আরবিপি সংরক্ষণ এবং পুনরুদ্ধার করতে পারে:
(gnu এসেম্বলার)
pushq %rbp # prologue [ two instructions not necessary ]
movq %rsp,%rbp
.... [code]
movq %rbp,%rsp # epilogue [ two instructions not necessary ]
popq %rbp
মনে রাখবেন যে সিসিসি-তে আপনি যদি না চান তবে আপনি -ম্নো-রেড-জোন পতাকাটি পাস করতে পারেন (তবে x86-64 এবিআই এর দরকার আছে)। লিনাক্স কার্নেলটি এবিআই সম্মতিযুক্ত হওয়ার দরকার নেই এবং এইভাবে সমস্ত কার্নেল কোড-এমএনও-রেড-জোন দিয়ে সংকলিত হয়।
তদ্ব্যতীত, স্ট্যাক পয়েন্টারের বাইরে মেমরি অ্যাক্সেস করা বিপজ্জনক নয় যদি এটি অপারেশনটির প্রত্যাশিত মোড। এটি কেবল বিপজ্জনক এবং অপরিকল্পিত এবং অপ্রত্যাশিত হলে দুর্নীতির দিকে পরিচালিত করতে পারে। যখন নির্গত কোড এটি করে, এটি জানে যে এটি কী করছে।