क्या 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 -s10240मेरे पीसी में प्रिंट ।
जैसा कि आप देख सकते हैं, दोनों ही स्थिति में स्टैक का आकार इससे बड़ा है जो ulimit -sदेता है। और स्टैक बड़े स्थानीय चर के साथ बढ़ता है। स्टैक का शीर्ष किसी तरह 3-5kB अधिक है &a[0](AFAIK लाल क्षेत्र 128B है)।
तो इस स्टैक मैप को कैसे आवंटित किया जाता है?