C++ 'da çalışan bir programın yığın boyutunu programsal olarak belirlemenin bir yolu olup olmadığını bilmek istiyorum. Öyleyse, programın çalışma zamanında ne kadar yığın bellek kullandığını programlamak için bir yol var mı? Yığının boyutunu belirlemek için, new
ve delete
operatörünü aşırı yükleyerek potansiyel bir yol görebiliyordum, ancak bunun akıllı göstergelerle çalışacağını düşünmüyorum. C++ Programında çalışma zamanında yığın boyutunun belirlenmesi
int main(){
const char STACK_BEGIN = 'A';
//a lot of code
register unsigned long int STACK_NOW asm("%esp");
long long int stack_size = (reinterpret_cast<int>(&STACK_BEGIN) - STACK_NOW);
//rest of code
}
Hayır, bunu yapmak için standart yöntemler gerçekten yok. Bu bilgiyi elde etmek için OS'ye özel sistem çağrıları olabilir. –
Windows yığınında hatırladığım gibi sayfalar sadece gerektiği gibi işlenir. Bu, büyük bir yığının belirtilmesi maliyetinin, gerçek bellek kullanımı değil, yalnızca bir miktar azaltılmış adres alanı olduğu anlamına gelir (gerekene kadar). Yine de, arabelleklerini dinamik olarak ayıran std :: vector gibi standart koleksiyonları kullanarak yığın kullanımını önemli ölçüde azaltabilirsiniz. –
Dünya çapında erişilebilir bir işaretçiyi, ana() rutininizdeki yığında bildirdiğiniz ilk değişkene ve daha sonra programınızın yürütülmesi sırasında herhangi bir zamanda depolayarak, en az yaklaşık yığın kullanımı fikrini alabileceğinizi düşünürdüm. Kısa süre önce bildirilen bir yığın değişkeninin adresi ile bu global işaretçinin değeri arasındaki farkı bulun. Bu ham bir tekniktir, ancak en az bir yığın kullanımı fikri sunmalıdır. – Logicrat