2008-11-25 14 views
6

मैं बैक स्टेज पर एक प्राचीन प्रकार की घोषणा और असाइनमेंट की प्रक्रिया को समझने की कोशिश कर रहा हूं।क्या आदिम को स्मृति पता असाइन किया गया है?

  1. int i;
  2. i = 3;

1 के लिए), स्मृति ढेर पर, यह एक अंतरिक्ष मैं 2 नामक एक पूर्णांक प्रकार मान) के भंडारण के लिए प्रदान करती है, यह करने के लिए मान 3 प्रदान करती है

से ऊपर की गई जगह क्या वहां कोई स्मृति पता है? मेरी छाप से, स्मृति पता हमेशा ढेर पर वस्तुओं से जुड़ा हुआ है?

अद्यतन:

उत्तर के बारे में:

तो, ढेर पर हर चर के लिए, वे सब एक स्मृति पते के रूप में अच्छी तरह से सिर्फ ढेर पर वस्तुओं की तरह आवंटित कर रहे हैं। क्या मैं सही हूँ?

लेकिन जावा के लिए, यह मामला नहीं है?

उत्तर

1

मान लीजिए कि आप सी या सी ++ (मैं नहीं बता सकता), हाँ के बारे में बात कर रहा हूं। आप इस तरह के पते तक पहुंच सकते हैं:

int i = 3; 

int *k = &i; // k now is a pointer to i 

*k = 4; // assigns the value k points to (i) to 4, i is now 4 
0

स्टैक बफर ओवरफ़्लो और कैसे होते हैं? :) किसी को ढेर के लिए एक सूचक को लिखना होगा।

5

हमेशा जुड़े पते नहीं होते हैं। कंपाइलर रजिस्टरों में चर डाल सकता है अगर उसे पता चलता है कि उनका पता प्रोग्रामर द्वारा कभी नहीं लिया जाता है। तो आपको मुख्य स्मृति तक किसी भी पहुंच की आवश्यकता नहीं होगी। ऊपर अपने कोड, में उदाहरण क्या संकलक उत्पन्न कर सकता है के रूप में सरल रूप में

add $2, $0, 3 

रजिस्टर 2. में मान 3 डाल करने के लिए जैसे ही आप एक सूचक बनाने के रूप में है और यह है कि चर को इंगित कर रही है, तो आपके पास हो सकता है के लिए एक पता, वास्तव में। और फिर चर केवल एक रजिस्टर में नहीं हो सकता है।

0

वास्तव में स्टैक प्रोसेस वर्चुअल मेमोरी का विशेष क्षेत्र है, इसलिए स्टैक में सब कुछ मेमोरी एड्रेस है। ईएसपी (एसपी) रजिस्ट्री (x86 आर्किटेक्चर) द्वारा आयोजित स्टैक के प्रमुख। मेमोरी एड्रेस से सामान्य रूप से कम पते को ढेर करें, क्योंकि स्टैक प्रोसेस विट्रियल मेमोरी की शुरूआत के करीब स्थित है।