Kırmızı bölge, tamamen ve basitçe talimatları kaydedebilen bir optimizasyondur. Bu, yerel işlevin böyle yapılması için her işlevin yayılan koddan yığın işaretçisinden çıkarılmasının artık gerekli olmadığı anlamına gelir
sub XXX, %rsp
yaprak fonksiyonları olmasalar bile her fonksiyon çağrısının başında. Derleyiciden yayılan kod genellikle, kaydetmeye gerek kalmadan ve diğer işlevleri çağırmadan önce yığın işaretçisinin altındaki kırmızı bölgedeki geçici alanı kullanabilir. Bu, kullanılabilir olması için yararlı bir optimizasyondur.
Yığın işaretçisinden daha fazla alt öğe göndermeniz gerekmiyorsa, yayılan kod temel işaretçi olarak rsp'yi, normalde rbp için ayrılmış bir işi kullanabilir ve yayılan kod başka bir genel amaçlı kayıt olarak rbp'yi kullanabilir.
Bu, sonuçta her işlev çağrısının prolog ve epilogunun rbp'yi kaydedip geri yükleyecek iki komutu kaydedebileceği anlamına gelir:
(GNU birleştirici)
pushq %rbp # prologue [ two instructions not necessary ]
movq %rsp,%rbp
.... [code]
movq %rbp,%rsp # epilogue [ two instructions not necessary ]
popq %rbp
Gcc'de istemiyorsanız -mno-red-zone bayrağını iletebileceğinizi unutmayın (ancak x86-64 ABI bunu gerektirir). Linux çekirdeğinin ABI uyumlu olması gerekmez ve bu nedenle tüm çekirdek kodu -mno-red-zone ile derlenir.
Ayrıca, beklenen çalışma modu bu ise, yığma işaretçisinin ötesinde belleğe erişmek tehlikeli değildir. Sadece tehlikelidir ve planlanmadığında ve beklenmedik olduğunda yolsuzluğa yol açabilir. Yayılan kod bunu yaptığında, ne yaptığını bilir.