Kezdőoldal » Számítástechnika » Programozás » C és C++ nyelvekben miért nem...

C és C++ nyelvekben miért nem automatikusan nullával lesznek inicializálva a lokális változók?

Figyelt kérdés
Ennek valami teljesítménybeli oka van gondolom.

#inicializálás #lokália változó
2020. dec. 7. 20:17
1 2
 1/12 anonim ***** válasza:
0%
Az.
2020. dec. 7. 20:27
Hasznos számodra ez a válasz?
 2/12 anonim ***** válasza:
0%

A C nyelvet akkor alkották, amikor még processzorok sem voltak.

eleve, a két csirkefogó /Ken és Ritchie/ minimalista elveket vallott, csak azzal foglalkoztak, amivel /szerintük/ érdemes volt. A változók azért nem lettek nullára bármi m ás értékre inicializálva, mert úgy gondolták, hogy ha vki használni is fogja azokat, akkor majd értéket ad nekik, vagy a program futása során kapnak valami értéket. Ha meg nem, akkor tök mindegy, hogy nulla van adott címen vagy más.

Ez a lazy, nihilista megközelítés később okozott is gondot eleget és sajnos okoz még ma is, olykor.

2020. dec. 7. 20:32
Hasznos számodra ez a válasz?
 3/12 anonim ***** válasza:
100%
Modern fordítók ezesetben jeleznek. Amugymeg azért mert az is időt/energiat igényel, hogy kinullázz egy változót. Írd be googleba ugyanezt a kérdést és találsz totál részletes leírást.
2020. dec. 7. 21:56
Hasznos számodra ez a válasz?
 4/12 anonim ***** válasza:
25%
Ha értekét adnának, az az elkészített program működését befolyásolhatná.
2020. dec. 8. 01:50
Hasznos számodra ez a válasz?
 5/12 A kérdező kommentje:

csak mert sok helyen irjak, hogy akkor is adjunk kezdoerteket ha majd egyszer ugyis kap erteket

[link]

2020. dec. 8. 09:05
 6/12 anonim ***** válasza:

Az memória foglalás nem egyenértékű a terület beállításával. Foglalás esetén csak egy címet foglalsz le, mint ha vennél egy telket. Az már egy másik dolog, hogy a teleken mi található.

Ha a memória területet kezdő reveláns kezdő értékkel beállítod, akkor megspórolsz egy init-re szánt CPU időt. Nyilván régen, ez fontos volt, de a mai gyorsaság mellet, már nem is vennéd észre. Továbbá a C/C++ nem tartalmaz saját motort, ellentétben a C#/Python/PHP/Java/... nyelvek, amik magától értetődően GC-znek is. Így a fejlesztő felelőssége minden egyes komponens/memória felszabadítás/... feladata.


Ennek meg van az előnye és hátránya: Nagyobb felelősség, de optimálisabb kód és futás.

Én személy szerint program szerver alkalmazás minőséget vizsgálok, és régi Java-s több TB-tot kezelő programnál már láttam olyat, hogy a Java neki áll GC-zni 2 percig, addig a teljes alkalmazás bemerevedik. Igaz ez változott a Java10/11 (?) verzióval, hogy nem az összes CPU szál GC-zik egyszerre. Nah ilyen a C++ban nincs.

C/C++ban te takarítasz magad után, állítasz be dolgokat amikor épp neked kell (init érték) és minden mást.

2020. dec. 9. 13:30
Hasznos számodra ez a válasz?
 7/12 anonim ***** válasza:
0%

"Foglalás esetén csak egy címet foglalsz le, "


Ey azért nem így van. Foglalás esetén egy byte-os adat esetén egy, négy byte-os adat esetén meg négy byte-nyi memóriát foglalsz le. De cím az csak kettő lesz ezekből.

2020. dec. 9. 13:36
Hasznos számodra ez a válasz?
 8/12 anonim ***** válasza:
Ne keverjük. Igen, lefoglalsz X byte-tot, de azt a CPU memória címzéssel éri el, kvázi terület címeid lesznek, amivel foglalsz. Hogy arra a memória címekket írhatod. Címek mennyisége határozza meg a memória területét.
2020. dec. 9. 13:42
Hasznos számodra ez a válasz?
 9/12 anonim ***** válasza:
0%

"Címek mennyisége határozza meg a memória területét."


Nem egészen. Az implementációtól nagyban függ, de alapvetően az a divat, hogy a változó tipusa nyilván van tartva. Adott egy cím és legalább egy tipusazonosító. Ebből a kettőből alakul ki a foglalás. Lásd az előbbi hozzászólásomat.

Mondjuk egy tömb esetén pedig, adott a tömbelemek tipusa és azok darabszáma. Ebből a két adatból lehet indexelni bárhová a tömbön belül és persze a memo foglalás is ez alapján történik.

A char esetén van egy címed. A 4 byte-os integer esetén szintén egy címed de 4-szer annyi foglalásod. Egy 16 elemű integer tömb esetén meg 16 x 4, azaz 64 byte foglalásod és egy címed. Meg persze egy másik az indexnek, de az már más területen.

2020. dec. 9. 13:54
Hasznos számodra ez a válasz?
 10/12 anonim ***** válasza:
Jó. Van egy 10 hektár területem. De hol? :) Ez valami ilyesmi. Igazad van, de csak csukott motorháztetőt nézve.
2020. dec. 9. 14:05
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!