C++-ban, ha deklarálok egy változót, de nem használom, akkor azt a fordító a fordításnál kiveszi a programból, vagy benne marad és foglalni fogja a helyet a memóriában?
Valóban nem meghatározott de abban az esetben amit írtam a legtöbb fordítónál az történik, hogy ahol a const változót használom, ott a fordított kódban szimplán az értékét fogja használni nem a változót.
5: const int a = 10;
01357DE8 mov dword ptr [a],0Ah
6: int* p = const_cast<int*>(&a);
01357DEF lea eax,[a]
01357DF2 mov dword ptr [p],eax
7: *p = 0;
01357DF5 mov eax,dword ptr [p]
01357DF8 mov dword ptr [eax],0
8: std::cout << a;
01357DFE push 0Ah
01357E00 mov ecx,offset std::cout (01483328h)
01357E05 call std::basic_ostream<char,std::char_traits<char> >::operator<< (0134016Fh)
Mivel nem használja az 'a' értékét így release módban "bele sem fordul a kódba".
Amikor nem const akkor így néz ki:
5: int a = 10;
00BC7DE8 mov dword ptr [a],0Ah
6: int* p = const_cast<int*>(&a);
00BC7DEF lea eax,[a]
00BC7DF2 mov dword ptr [p],eax
7: *p = 0;
00BC7DF5 mov eax,dword ptr [p]
00BC7DF8 mov dword ptr [eax],0
8: std::cout << a;
00BC7DFE mov eax,dword ptr [a]
00BC7E01 push eax
00BC7E02 mov ecx,offset std::cout (0CF3328h)
00BC7E07 call std::basic_ostream<char,std::char_traits<char> >::operator<< (0BB016Fh)
Ugyan az annyi különbséggel, hogy magát a változó értékét használja futási időben.
"Szoval ennek semmi koze az optimalizalashoz, forditofuggo az eredmeny."
Akarod mondani undefined. (a fordítófüggő : implementation-defined)
En meg mindig fenntartom, hogy ennek semmi koze az optimalizalashoz. Egyebkent teljesen logikusan implementaltak tobb forditoban is, annak ellenere hogy a szabvany ezt nem koveteli meg - de ez teljesen offtopik.
A forditoval viszont valoban pongyolan fogalmaztam, termeszetesen a verziok kozott is megvaltozhat a konstansok implementacioja (hogyha te az eltero verzioju forditokat eddig azonoskent kezelted volna).
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!