2012-01-18 21 views
6

Son zamanlarda "linux stack" ve "linux stack size" ile bir hataya girdim. Kutumda için sınır ne olduğunu görmek içinLinux Yığını nedir?

ulimit -a 

denemek için beni yönlendiren bir blog geldi ve varsayılan olarak görünüyor 8192kb ayarlanmıştır.

"linux stack" nedir? Nasıl çalışır, ne depolar, ne yapar?

+3

http://en.wikipedia.org/wiki/Call_stack –

+0

yığın taşması çok derin (veya sonsuz) yineleme ile görüntülenebilir. Ya da belki de C kodundaki alloca'nın (veya eşdeğerli, değişken uzunluktaki diziler) kötüye kullanılmasıyla. –

+0

İlgili: http://stackoverflow.com/questions/17671423/stack-allocation-for-process | http://unix.stackexchange.com/questions/145557/how-does-stack-allocation-work-in-linux/239323#239323 –

cevap

7

Kısa cevap:

programları linux kutusu kaçak, onlar eklemek ve programlar fonksiyonu olarak düzenli olarak the stack verileri kaldırın. Yığın boyutu, yığın için bellekte ne kadar alan ayrıldığını gösterir. Yığın boyutunu artırırsanız, programın çağrılabilecek rutin sayısını artırmasına izin verir. Bir işlev her çağrıldığında, yığına veri eklenebilir (son rutinler verilerinin üstünde yığılır.)

Program çok karmaşık değilse veya özel amaçlı tasarlanmış değilse, 8192 kb yığın boyutu normalde iyi. Grafik işleme programları gibi bazı programlar, yığının çalışabilmesi için boyutunu artırmanızı gerektirir. Yığına çok fazla veri depolayabileceğinden.

Bu uygulamalar için yığın boyutunu artırmak için çekinmeyin, sorun değil. Bunu yapmak için kullanmak için

ulimit -s bytes

btw, What is a StackOverflowError?

+0

Cevabınız için çok teşekkürler. Bir Ruby uygulamasında 'SystemStackError: stack level çok derin 'hatası alıyorum ve araştırmaya devam etmeden önce temelleri daha iyi anlamak istedim. – jaredonline