यदि आप Windows का उपयोग कर रहे हैं, तो इसका कारण PE संरचना है।
आपका heap
चर .data
फ़ाइल के अनुभाग में संग्रहीत किया जाता है और इसका पता इस खंड की शुरुआत के आधार पर लगाया जाता है। प्रत्येक अनुभाग एक पते में स्वतंत्र रूप से लोड किया गया है, लेकिन इसका प्रारंभिक पता पृष्ठ आकार का एक से अधिक है। चूँकि आपके पास कोई अन्य चर नहीं है .data
, इसलिए इसका पता संभवत: खंड का प्रारंभ है , इसलिए इसका पता कई आकार का होगा।
उदाहरण के लिए, यह आपके कोड के संकलित Windows संस्करण की मेज है:
खंड अपने संकलित कोड है और थे अपने शामिल चर। जब आपके पीई को मेमोरी में लोड किया जाता है, तो अनुभाग अलग-अलग पते में लोड किए जाते हैं और जो कि वापस आ जाता है और पृष्ठ आकार के कई हो जाएगा। लेकिन प्रत्येक चर का पता उस खंड की शुरुआत के सापेक्ष होता है जो अब एक पृष्ठ आकार है। इसलिए आपको हमेशा कम अंकों पर एक निश्चित संख्या दिखाई देगी। चूँकि अनुभाग के प्रारंभ से संबंधित पता संकलक, संकलन विकल्प, आदि पर आधारित है, इसलिए आपको एक ही कोड से अलग-अलग संख्याएँ दिखाई देंगी, लेकिन अलग-अलग संकलक, लेकिन हर बार जो छपेगा वह निश्चित है।.text
.data
heap
VirtualAlloc()
heap
जब मैं कोड संकलित करता हूं, तो मैंने देखा heap
कि खंड की 0x8B0
शुरुआत के बाद बाइट पर रखा गया है .data
। इसलिए हर बार जब मैं इस कोड को चलाता हूं, तो मेरा पता समाप्त हो जाता है 0x8B0
।