2013-04-07 3 views
5

मैं नहीं पूछ रहा हूं कि ढेर/ढेर/स्थिर मतलब क्या है या उनके बीच क्या अंतर है। मैं पूछ रहा हूं कि किस क्षेत्र में एक कॉन्स ऑब्जेक्ट है?सी ++ में कौन सा मेमोरी एरिया एक कॉन्स ऑब्जेक्ट है?

सी ++ कोड:

a, b, और c में
#include <cstdio> 

using namespace std; 

const int a = 99; 

void f() 
{ 
    const int b = 100; 
    printf("const in f(): %d\n", b); 
} 

int main() 
{ 
    const int c = 101; 
    printf("global const: %d\n", a); 
    f(); 
    printf("local const: %d\n", c); 
    return 0; 
} 

जो स्मृति क्षेत्र कर रहे हैं? और उनके जीवनकाल क्या हैं? क्या सी भाषा में कोई अंतर है?

यदि मैं अपना पता लेूं तो क्या होगा?

+4

यदि आप उनका पता नहीं लेते हैं, तो शायद उन्हें अनुकूलित किया जाएगा। – Antimony

+1

वास्तव में किसी भी स्मृति क्षेत्र में होने की आवश्यकता नहीं है। कंपाइलर उन सभी चरों को दूर कर सकता है। 'const' एक चर के जीवनकाल में कोई फर्क नहीं पड़ता। – john

+0

@ एंटीमोनी क्या आप अधिक जानकारी प्रदान कर सकते हैं, बहुत धन्यवाद। :] – imsrch

उत्तर

6

यह निर्दिष्ट नहीं है। आपके द्वारा दिखाए गए कोड को संकलित करते समय एक अच्छा अनुकूलन संकलक शायद किसी भी संग्रहण को आवंटित नहीं करेगा।

; f() 
__Z1fv: 
LFB1: 
     leaq LC0(%rip), %rdi 
     movl $100, %esi 
     xorl %eax, %eax 
     jmp  _printf 
LFE1: 
     .cstring 
LC1: 
     .ascii "global const: %d\12\0" 
LC2: 
     .ascii "local const: %d\12\0" 

; main() 
_main: 
LFB2: 
     subq $8, %rsp 
LCFI0: 
     movl $99, %esi 
     xorl %eax, %eax 
     leaq LC1(%rip), %rdi 
     call _printf 
     call __Z1fv 
     movl $101, %esi 
     xorl %eax, %eax 
     leaq LC2(%rip), %rdi 
     call _printf 
     xorl %eax, %eax 
     addq $8, %rsp 
LCFI1: 
     ret 

आप देख सकते हैं, स्थिरांक के मूल्यों मशीन कोड में सीधे एम्बेडेड रहे हैं:

वास्तव में, यह वास्तव में क्या मेरी संकलक (g++ 4.7.2), करता है के लिए अपने कोड संकलन है। उनमें से किसी के लिए आवंटित ढेर, ढेर या डेटा सेगमेंट पर कोई स्मृति नहीं है।

+0

क्या होगा अगर 'a' या' b' एक जटिल उपयोगकर्ता-परिभाषित प्रकार है? – imsrch

+0

वास्तव में, चूंकि कोड प्रत्येक चल रहे प्रोग्राम के लिए स्मृति में है, यह कहीं स्मृति में है .. – scones

+0

@ user1477871: यह निर्भर करता है। आप सवाल पूछ रहे हैं जो विशेष रूप से जवाब देना असंभव है। – NPE

संबंधित मुद्दे