Kezdőoldal » Számítástechnika » Programozás » C++-ban, ha deklarálok egy...

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?

Figyelt kérdés

2016. ápr. 30. 16:01
1 2
 11/13 anonim ***** válasza:

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.

2016. ápr. 30. 19:19
Hasznos számodra ez a válasz?
 12/13 anonim ***** válasza:

"Szoval ennek semmi koze az optimalizalashoz, forditofuggo az eredmeny."


Akarod mondani undefined. (a fordítófüggő : implementation-defined)

2016. máj. 1. 14:44
Hasznos számodra ez a válasz?
 13/13 anonim ***** válasza:

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).

2016. máj. 1. 15:26
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!