क्या OS स्टैक या कुछ और के लिए वैध आभासी स्थान की निश्चित राशि आरक्षित करता है? क्या मैं केवल बड़े स्थानीय चर का उपयोग करके स्टैक ओवरफ्लो का उत्पादन करने में सक्षम हूं?
मैंने C
अपनी धारणा का परीक्षण करने के लिए एक छोटा कार्यक्रम लिखा है । यह X86-64 CentOS 6.5 पर चल रहा है।
#include <string.h>
#include <stdio.h>
int main()
{
int n = 10240 * 1024;
char a[n];
memset(a, 'x', n);
printf("%x\n%x\n", &a[0], &a[n-1]);
getchar();
return 0;
}
कार्यक्रम चलाने &a[0] = f0ceabe0
और देता है&a[n-1] = f16eabdf
खरीद नक्शे ढेर को दर्शाता है: 7ffff0cea000-7ffff16ec000. (10248 * 1024B)
फिर मैंने बढ़ाने की कोशिश की n = 11240 * 1024
कार्यक्रम चलाने &a[0] = b6b36690
और देता है&a[n-1] = b763068f
खरीद नक्शे ढेर को दर्शाता है: 7fffb6b35000-7fffb7633000. (11256 * 1024B)
ulimit -s
10240
मेरे पीसी में प्रिंट ।
जैसा कि आप देख सकते हैं, दोनों ही स्थिति में स्टैक का आकार इससे बड़ा है जो ulimit -s
देता है। और स्टैक बड़े स्थानीय चर के साथ बढ़ता है। स्टैक का शीर्ष किसी तरह 3-5kB अधिक है &a[0]
(AFAIK लाल क्षेत्र 128B है)।
तो इस स्टैक मैप को कैसे आवंटित किया जाता है?