Kezdőoldal » Számítástechnika » Programozás » A c++ nyelvben miért van...

A c++ nyelvben miért van szükség size_t típusra? Nem lenne egyszerűbb unsigned long long intben tárolni a nagy értékeket? Vagy a size_t nagyobb mint az unsigned long long?

Figyelt kérdés

#C++ #size_t
2021. márc. 14. 09:29
 1/8 anonim ***** válasza:
100%
A size_t nem nagyobb, mint az unsigned long long, de nem "pazarolsz" memóriát a használatával. Nem kell azon törnöd a fejed, hogy 32 vagy 64 bites rendszerre fordítod le a programod. 32 bites rendszeren felesleges 64 biten tárolni egy indexet vagy méretet, mert ott beférne a (32 bites) size_t-be is. Ha mikrokontrollerre fordítasz, ott könnyebb kifutni a memóriából, ott fontos igazán a lehető legkisebb, de még elég nagy típus használata. És a size_t mindig unsigned lesz, te meg egyszer-egyszer lefelejtheted ezt a kulcsszót a típusodról.
2021. márc. 14. 09:50
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:
100%
Az egy absztrakció. A size_t így független lehet a hardwertől és a többi típustól. Más hardwereken más méretű lehet elvileg. Van egy typedef valahol a std libben. Lehet h épp ugyanaz a te gépeden. Egyébként aligha lehet nagyobb mint a pointer méret, hiszen ha a char[] az egész memóriát fedné ... Az unsigned long long pedig min 64 bit per def, ami 32 bit rendszeren nagyobb mint a ptr méret.
2021. márc. 14. 09:55
Hasznos számodra ez a válasz?
 3/8 anonim ***** válasza:
100%

Az előző válaszolók is szépen leírták az okát, én már csak egy picit tudom kiegészíteni. A size_t mint típus nem 32 vagy 64 bites. Definíció (avagy a C/C++ szabvány) szerint egy size_t típusú változó el tudja tárolni a sizeof operátor visszatérési értékét.


Így a size_t típus maximális értékénél nagyobb méretű objektumot nem lehet létrehozni. Általában ez az érték a legnagyobb mérete egy tömbnek is, ezért szokás tömbök indexelésénél is size_t-t használni.


Az előnye ennek annyi, hogy ha azonos kódot akarsz fordítani egy 16 bites mikrokontrollerre, vagy egy 64 bites asztali gépre, akkor nem kell különböző típusú indexeket használnod, a size_t minden platformon a megfelelő típut fogja jelölni.


Ha egyszerűen egy nagy számot akarsz tárolni, aminek nincsen köze tömbök indexeléséhez, akkor valóban ajánlott más típust használni a size_t helyett. Ilyen lehet az általad említett unsigned long long, vagy ha pontosan meg akarod szabni a számok méretét, akkor az uint64_t (64 bites, unsigned integer).

2021. márc. 14. 13:16
Hasznos számodra ez a válasz?
 4/8 A kérdező kommentje:
Amúgy a sizeof operátor mindig csak ilyen 1,2,4, 8,16 nagyságrendű értékeket ad vissza. Ehhez akár egyunsigned char is elég lenne, nem?
2021. márc. 14. 16:12
 5/8 anonim ***** válasza:

Nem. Lehet azt akármilyen objektumra v tömbre.

[link]

[link]

2021. márc. 14. 16:39
Hasznos számodra ez a válasz?
 6/8 anonim ***** válasza:

A sizeof-ot tudod használni bonyolultabb típusok méretének lekérdezésére is.


Pl csak csinálj ennyit:

class X{

unsigned long long X1, X2, X3, X4, X5;

};


És a sizeof(X) máris jóval nagyobb számot ad majd vissza. Illetve ugyanez még mindig igaz a konstans méretű tömbökre is:


int arr[3000];

sizeof(arr);


Itt is jóval nagyobb számot fog visszaadni. C-ben és C++-ban a tömb is típusnak számít, így azoknak a maximális mérete is közvetlenül összefügg a size_t típus maximális értékével.

2021. márc. 14. 16:40
Hasznos számodra ez a válasz?
 7/8 A kérdező kommentje:
Tehát akkor a size_t típus minden implementációban egy typedef, csak épp különböző típusra?
2021. márc. 15. 12:58
 8/8 anonim ***** válasza:
ja
2021. márc. 15. 12:59
Hasznos számodra ez a válasz?

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!